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