Musab
Bu yazınızı baz alarak başka arkadaşlarında yararlanmasını sağlamak için, tam teşekküllü cevabı yazıyorum.
Soruyu adım adım inceleyerek çözelim. Soruda verilen int *ptr = &month[3];
ifadesini analiz edeceğiz ve ardından *ptr
ifadesinin neye eşit olduğunu belirleyeceğiz.
Öncelikle, int *ptr = &month[3];
ifadesi ile ptr
işaretçisinin month
dizisinin 3. indeksini işaret ettiğini anlıyoruz. Bu durumda, ptr
işaretçisi month
dizisinin 4. elemanını (çünkü diziler sıfırdan başlar) işaret eder.
Adım 1: *ptr değeri nedir?
*ptr
ifadesi, ptr
işaretçisinin işaret ettiği değeri döndürür. Yani:
*ptr == month[3]
Şimdi seçenekleri inceleyelim:
Seçeneklerin Analizi:
a) month
month
ifadesi, month
dizisinin başlangıç adresini gösterir. Yani bu ifade month
dizisinin tamamını gösterir, tek bir elemanı değil. Bu nedenle month
ifadesi *ptr
değerine eşit değildir.
b) ptr[0]
ptr[0]
ifadesi, ptr
işaretçisinin işaret ettiği ilk elemanı ifade eder. Bu durumda ptr
işaretçisi month[3]
'ü işaret ettiğine göre:
ptr[0] == *ptr == month[3]
Bu nedenle, bu seçenek doğrudur.
c) ptr[1]
ptr[1]
ifadesi, ptr
işaretçisinin işaret ettiği elemanın bir sonrasını ifade eder. Yani:
ptr[1] == month[4]
Bu nedenle ptr[1]
ifadesi *ptr
değerine eşit değildir.
d) *(month + 3)
*(month + 3)
ifadesi, month
dizisinin 3. indeksindeki değeri ifade eder. Yani:
*(month + 3) == month[3] == *ptr
Bu nedenle bu seçenek doğrudur.
e) (month + 3)[0]
(month + 3)[0]
ifadesi, month
dizisinin 3. indeksindeki değeri ifade eder. Yani:
(month + 3)[0] == month[3] == *ptr
Bu nedenle bu seçenek de doğrudur.
f) (month + 1)[2]
(month + 1)[2]
ifadesi, month
dizisinin 1. indeksinden başlayarak 2 indeks ilerleyip, 3. indeksteki değeri ifade eder. Yani:
(month + 1)[2] == month[3] == *ptr
Bu nedenle bu seçenek de doğrudur.
g) *(month + 3)[0]
*(month + 3)[0]
ifadesi bir hata içerir, çünkü *(month + 3)
bir tamsayıya eşittir ve [0]
ifadesi bir diziye uygulanabilir. Bu nedenle bu ifade geçersizdir ve *ptr
değerine eşit değildir.
Sonuç:
Doğru seçenekler b), d), e), ve f)'dir. Bu nedenle:
Cevap: b, d, e, f