#include<stdio.h>
int main()
{
int i, j;
int *pi,*pj;
pi=&i;
pj=&j;
printf("pi-pj=%d\n",pi-pj);
return 0;
}
Próbowałem tego kodu na różnych kompilatorach, ale za każdym razem otrzymuję taki sam wynik, czy ktoś może mi pomóc mi zrozumieć, dlaczego to jest to samo?Wyjście tego kodu C
Ouput:
pi -pj = 3
Jestem zdezorientowany, jak pamięć normalnie byłyby przydzielane w sposób zwarty. Tak więc, jeśli powiemy, nasz stos systemu rośnie w dół i mamy &i = 0xA
, następnie adres j(&j) = 0x6
(ponieważ liczby całkowite są 4 bajty). Teraz, gdy drukujemy różnicę między tymi dwoma wartościami wskaźnika int
, wyjście powinno być "1"
. Ale nadchodzi jako "3"
. Dlaczego?
Witamy w Stack Overflow! Jakie wyniki osiągasz? Czego oczekiwałeś? Jeśli chcesz dokładniej określić, o co chodzi w tym pytaniu, możemy zaoferować lepszą opinię. Czy to pytanie o zadanie domowe? Jeśli tak, powinieneś oznaczyć go jako taki. – templatetypedef
Uzyskiwanie tego samego wyniku z różnych kompilatorów jest problemem. Cholerny! Wszystkie moje programy nie działają wtedy poprawnie. – tjm
Przepraszam, za spowodowane niedogodności, edytowałem moje zapytanie, dziękuję za kłótnie w opisie problemu. – Learner