#include<stdio.h>
int main()
{
int i, j;
int *pi,*pj;
pi=&i;
pj=&j;
printf("pi-pj=%d\n",pi-pj);
return 0;
}
Я пробовал этот код на разных компиляторах, но каждый раз, когда я получаю один и тот же результат, кто-нибудь может помочь мне понять, почему он такой же?
Ouput:
pi -pj = 3
Я в замешательстве, поскольку память обычно выделяется непрерывно. Итак, если, скажем, наш системный стек растет вниз, и у нас есть &i = 0xA
, то адрес j(&j) = 0x6
(поскольку целые числа составляют 4 байта). Теперь, когда мы печатаем разницу между этими двумя int
значениями указателя, вывод должен быть "1"
. Но это приходит как "3"
. Почему это?