Aşağıdaki kod parçacığında, 'degistir' fonksiyonu 'sayi' değişkenini nasıl etkiler? ```cpp void degistir(int &x) { x = x * 2; } int main() { int sayi = 5; degistir(sayi); // sayi değeri nedir? } ```
A) 5Bu soruda, C++'taki fonksiyonlara referans ile parametre geçirme konusunu anlamamız gerekiyor. Adım adım inceleyelim:
Öncelikle main fonksiyonuna bakıyoruz. Burada int sayi = 5; satırı ile sayi adında bir tam sayı değişkeni oluşturuluyor ve başlangıç değeri olarak $5$ atanıyor.
Daha sonra degistir(sayi); satırı ile degistir fonksiyonu çağrılıyor. Bu noktada sayi değişkeni, degistir fonksiyonuna parametre olarak gönderiliyor.
Şimdi degistir fonksiyonunun tanımına bakalım: void degistir(int &x). Buradaki kilit nokta int &x ifadesidir. Ampersant (&) işareti, x'in bir referans parametresi olduğunu gösterir. Bu, x'in aslında main fonksiyonundaki sayi değişkeninin bir takma adı (alias) olduğu anlamına gelir. Yani, degistir fonksiyonu içinde x üzerinde yapılan herhangi bir değişiklik, doğrudan main fonksiyonundaki sayi değişkenini etkiler.
Fonksiyonun içinde x = x * 2; satırı çalışır. x'in başlangıç değeri (yani sayi'nin değeri) $5$ olduğu için, bu işlem $5 * 2 = 10$ sonucunu verir. Bu $10$ değeri, x'e atanır. x bir referans olduğu için, bu atama doğrudan main fonksiyonundaki sayi değişkeninin değerini $10$ olarak günceller.
degistir fonksiyonu tamamlandığında, main fonksiyonuna geri dönülür. Bu noktada sayi değişkeninin değeri artık $10$'dur.
Bu durumda, sayi değişkeninin son değeri $10$ olacaktır.
A seçeneği ($5$) yanlıştır, çünkü fonksiyon referans ile geçiş sayesinde sayi değişkeninin değerini değiştirdi.
C seçeneği ("Değişmez, çünkü fonksiyon değer kopyasıyla çalışır") yanlıştır. Fonksiyon parametresindeki & işareti, bunun referans ile geçiş (pass by reference) olduğunu gösterir, değer kopyası (pass by value) değil. Eğer int x olsaydı değer kopyası olurdu ve sayi değişmezdi.
D seçeneği ("Derleme hatası verir") yanlıştır. Verilen kod parçacığı sözdizimsel olarak doğrudur ve herhangi bir derleme hatası vermez.
Cevap B seçeneğidir.