Tamam, bu yüzden C değeri-değer, yani değişkenin bir kopyası, parametre için orijinal değişken yerine kullanılır, sağ? Yani, bu kopya her zaman aynı hafıza adresine sahip olacak mı?C'de bir işlev parametresi her zaman aynı bellek adresine sahip mi?
void test(int *ptr) {
printf("&ptr: %p\n", &ptr);
printf("ptr: %p\n", ptr);
printf("*ptr: %d\n\n", *ptr);
}
int main() {
int a = 1, b = 2, c = 3, d = 4, e = 5;
test(&a);
test(&b);
test(&c);
test(&d);
test(&e);
return 0;
}
bu koddan almak çıkışı şudur: Bu kodu düşünün
&ptr: 0x7fff70536728
ptr: 0x7fff7053674c
*ptr: 1
&ptr: 0x7fff70536728
ptr: 0x7fff70536750
*ptr: 2
&ptr: 0x7fff70536728
ptr: 0x7fff70536754
*ptr: 3
&ptr: 0x7fff70536728
ptr: 0x7fff70536758
*ptr: 4
&ptr: 0x7fff70536728
ptr: 0x7fff7053675c
*ptr: 5
İçimdeki his "hayır" oldu. ptr
'un test()
kod bloğu dışında bulunmadığı benim anlayışım. Peki, neden tüm 5 işlev çağrıları için &ptr
aynıdır? ptr
test()
içinde yerel bir değişken olduğundan
Aynı olması garanti edilemez. Belirtilmemiş davranışları gözlemliyorsunuz. (Ana ek olarak başka bir işlevden çağırırsanız adres değişikliğini görebilirsiniz.) –
ve arayarak bir işlev çağrısı olmadan bile bu davranışı göstermeyebilir. belirli bir makinede uygulamaya bağlı olarak. –
@AndyzSmith ayrıca derleyicinin bunu nasıl uygulamaya koyduğuna bağlı olarak değişir. :) – jmstoker