Вывод этого кода C

#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» . Почему?

5
задан Bo Persson 29 June 2011 в 16:00
поделиться