Menu
Coddy logo textTech

İşaretçiler ile Değişkenleri Değiştirme

Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 27 / 63.

Artık pointer'ların gerçek gücünden yararlanabilirsiniz: orijinal değişkeni bir fonksiyon aracılığıyla değiştirmek. Bir fonksiyona bir pointer geçirdiğinizde, fonksiyon o bellek adresinde saklanan değeri değiştirmek için dereference operatörünü kullanabilir.

Fonksiyonun içinde, orijinal değişkenin değerine erişmek ve onu değiştirmek için * operatörünü kullanarak işaretçinin başvurusunu çözersiniz (dereference). Bu teknik, değişkenin bellekteki konumuna bir referans aktardığınız için pass-by-reference olarak adlandırılır.

void doubleValue(int *ptr) {
    *ptr = *ptr * 2;  // Orijinal değeri değiştirmek için işaretçiyi çözün (dereference)
}

int main() {
    int x = 5;
    doubleValue(&x);  // x'in adresini geçirin
    // x artık 10!
    return 0;
}

İşin püf noktası, işaretçinin tuttuğu bellek adresindeki değeri değiştirmek için atamanın sol tarafında *ptr kullanmaktır. Bu, fonksiyonların çağıran fonksiyondaki değişkenleri kalıcı olarak değiştirmesine olanak tanıyarak, değerle geçme (pass-by-value) yönteminin tek başına başaramayacağı güçlü programlama olanaklarının önünü açar.

challenge icon

Görev

Kolay

Bir tam sayının değerini üç katına çıkaran bir fonksiyon oluşturarak, işaretçiler (pointers) aracılığıyla değişkenlerin nasıl değiştirildiğini gösteren bir C programı yazın.

Programınız şunları yapmalıdır:

  1. Parametre olarak bir tam sayı işaretçisi alan tripleValue adında bir fonksiyon oluşturun
  2. tripleValue fonksiyonu içinde, bellek adresindeki değeri 3 ile çarpmak için dereference (adresteki değere erişim) operatörünü kullanın
  3. tripleValue fonksiyonu içinde, yeni değeri şu formatta yazdırın: Value tripled to: [value]
  4. main fonksiyonunda, number adında bir tam sayı değişkeni tanımlayın ve ona 8 değerini atayın
  5. Orijinal değeri şu formatta yazdırın: Original value: [value]
  6. tripleValue fonksiyonunu çağırın ve adres-of operatörünü kullanarak number değişkeninin adresini geçirin
  7. Fonksiyon çağrısından sonra, number değişkeninin son değerini şu formatta yazdırın: Final value: [value]

Çıktınız, fonksiyonun işaretçi aracılığıyla orijinal değişkeni başarıyla değiştirdiğini göstermelidir:

Original value: 8
Value tripled to: 24
Final value: 24

Bu meydan okuma, işaretçiler kullanarak referansla geçişin (pass-by-reference) gücünü gösterir; burada fonksiyon, işaretçiyi dereference ederek ve o bellek konumundaki değeri değiştirerek orijinal değişkeni kalıcı olarak değiştirebilir.

Kopya kağıdı

İşaretçileri kullanarak bir fonksiyon aracılığıyla orijinal değişkeni değiştirebilirsiniz. Bu teknik, değişkenin bellekteki konumuna bir referans ilettiğiniz için referansla geçme (pass-by-reference) olarak adlandırılır.

Fonksiyonun içinde, orijinal değişkenin değerine erişmek ve onu değiştirmek için * operatörünü kullanarak işaretçinin referansını çözün (dereference):

void doubleValue(int *ptr) {
    *ptr = *ptr * 2;  // Orijinal değeri değiştirmek için referansı çözün
}

int main() {
    int x = 5;
    doubleValue(&x);  // x'in adresini geçirin
    // x artık 10!
    return 0;
}

İşaretçinin tuttuğu bellek adresindeki değeri değiştirmek için atamanın sol tarafında *ptr kullanın. Bu, fonksiyonların çağıran fonksiyondaki değişkenleri kalıcı olarak değiştirmesine olanak tanır.

Kendin dene

#include <stdio.h>

// YAPILACAK: tripleValue fonksiyonunuzu buraya yazın

int main() {
    // YAPILACAK: Kodunuzu buraya yazın
    // number değişkenini tanımlayın ve başlatın
    // Orijinal değeri yazdırın
    // tripleValue fonksiyonunu çağırın
    // Son değeri yazdırın
    
    return 0;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Logic & Flow bölümündeki tüm dersler