Menu
Coddy logo textTech

Değer ile Geçme

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

C'de bir fonksiyona bir değişken geçirdiğinizde, fonksiyon değişkenin kendisini değil, o değişkenin değerinin bir kopyasını alır. Bu temel kavram pass-by-value (değer ile çağırma) olarak adlandırılır.

İşte olan şudur: Değeri 10 olan bir x değişkenine sahipseniz ve bunu bir fonksiyona geçirirseniz, fonksiyon bu değerin kendi ayrı kopyasını alır. Fonksiyonun bu kopya üzerinde yaptığı herhangi bir değişiklik, çağıran fonksiyondaki orijinal değişkeni etkilemez.

void tryToChange(int num) {
    num = 99;  // Bu sadece kopyayı değiştirir
}

int main() {
    int x = 10;
    tryToChange(x);
    // x hala 10'dur, 99 değil
    return 0;
}

Bu davranış, orijinal verilerinizin fonksiyonlar tarafından yanlışlıkla değiştirilmesini önler. Ancak bu, bir fonksiyonun bir değişkenin değerini gerçekten değiştirmesini istiyorsanız, değer ile geçme (pass-by-value) yönteminin işe yaramayacağı anlamına da gelir. İşaretçiler (pointers) ve bu sorunu nasıl çözebilecekleri hakkında bilgi edinmeye devam ederken bu sınırlamayı anlamak çok önemlidir.

challenge icon

Görev

Kolay

Bir fonksiyonun içinde bir değişkeni değiştirmeye çalışarak ve orijinal değişkenin değişmeden kaldığını gözlemleyerek değerle çağırma (pass-by-value) kavramını gösteren bir C programı yazın.

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

  1. number adında bir tam sayı parametresi alan tryToModify adında bir fonksiyon oluşturun
  2. tryToModify fonksiyonunun içinde, number parametresine 50 ekleyin
  3. tryToModify fonksiyonunun içinde, değiştirilmiş değeri şu formatta yazdırın: Inside function: [value]
  4. main fonksiyonunda, original adında bir tam sayı değişkeni tanımlayın ve ona 25 değerini atayın
  5. Fonksiyonu çağırmadan önce orijinal değeri şu formatta yazdırın: Before function call: [value]
  6. tryToModify fonksiyonunu çağırın ve original değişkenini argüman olarak geçirin
  7. Fonksiyon çağrısından sonra, original değerini tekrar şu formatta yazdırın: After function call: [value]

Çıktınız, fonksiyon içindeki değişikliğe rağmen orijinal değişkenin değerinin değişmeden kaldığını göstermelidir:

Before function call: 25
Inside function: 75
After function call: 25

Bu meydan okuma, C'deki değerle çağırma (pass-by-value) temel kavramını gösterir; burada fonksiyonlar değişkenlerin kendilerini değil, kopyalarını alırlar. Fonksiyon içindeki parametre üzerinde yapılan herhangi bir değişiklik, çağıran fonksiyondaki orijinal değişkeni etkilemez.

Kopya kağıdı

C'de fonksiyonlar, değişkenlerin kendilerini değil, değişken değerlerinin bir kopyasını alırlar. Buna değer ile geçme (pass-by-value) denir.

Bir değişkeni bir fonksiyona aktardığınızda, fonksiyon içinde yapılan herhangi bir değişiklik yalnızca kopyayı etkiler ve orijinal değişkeni değiştirmeden bırakır:

void tryToChange(int num) {
    num = 99;  // Bu sadece kopyayı değiştirir
}

int main() {
    int x = 10;
    tryToChange(x);
    // x hala 10'dur, 99 değil
    return 0;
}

Bu davranış, orijinal verilerinizin fonksiyonlar tarafından yanlışlıkla değiştirilmesini önler, ancak bir fonksiyonun bir değişkenin değerini gerçekten değiştirmesini istiyorsanız değer ile geçmenin (pass-by-value) işe yaramayacağı anlamına gelir.

Kendin dene

#include <stdio.h>

// YAPILACAK: tryToModify fonksiyonunuzu buraya yazın

int main() {
    // YAPILACAK: Kodunuzu buraya yazın
    // 1. Orijinal değişkeni tanımlayın ve başlatın
    // 2. Fonksiyon çağrısından önceki değeri yazdırın
    // 3. tryToModify fonksiyonunu çağırın
    // 4. Fonksiyon çağrısından sonraki 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