#include<stdio.h>
int main()
{
int i, j;
int *pi,*pj;
pi=&i;
pj=&j;
printf("pi-pj=%d\n",pi-pj);
return 0;
}
Bu kodu farklı derleyiciler üzerinde denedim, ancak her seferinde aynı sonucu alıyorum, neden aynı olduğunu anlamanıza yardımcı olan herhangi biri olabilir mi?Bu C kodunun çıkışı
Çıkışı: Bellek normalde bitişik olarak tahsis edilmesi gibi
pi -pj = 3
Ben karıştı. Yani, diyelim, sistem yığınımız aşağı doğru büyüyor ve biz &i = 0xA
, daha sonra j(&j) = 0x6
adresleri var (tamsayılar 4 bayttır). Şimdi bu iki int
işaretçi değeri arasındaki farkı yazdırırken, çıktı "1"
olmalıdır. Ama "3"
olarak geliyor. Neden?
Yığın Taşmasına Hoş Geldiniz! Ne çıktı alıyorsunuz? Ne bekliyordun? Bu sorunun ne hakkında daha hassassanız, daha iyi geri bildirim verebiliriz. Ayrıca, bu bir ev ödevi sorusu mu? Eğer öyleyse, böyle etiketlemelisiniz. – templatetypedef
Farklı derleyicilerden aynı sonucu almak bir problemdir. Lanet olsun! Tüm programlarım düzgün çalışmıyor. – tjm
Üzgünüz, neden olduğu uyumsuzluk için, sorgumu düzenledim, sorun açıklamasını tartıştığınız için teşekkürler. – Learner