Итак, у меня было это упражнение в моем классе, где я должен был сказать, какой из двух адресов больше, когда я создаю два символа в основной функции.
Поскольку локальные переменные хранятся в стеке, который начинается с высокого адреса и переходит на низкий адрес. Ответ был прост, что первый символ имеет больший адрес.
Но потом я написал небольшую тестовую программу:
#include "stdio.h"
int main(void)
{
int a = 3;
int b = 4;
printf("Size a: %lu \n"
"size b: %lu \n",
sizeof(a),
sizeof(b));
printf("Address a: %p \n"
"Address b: %p \n",
(void *)&a,
(void *)&b);
return 0;
}
Выход:
Size a: 4
size b: 4
Address a: 0x7fffa1eb8a98
Address b: 0x7fffa1eb8a9c
[d4 ] Выход был введен в заблуждение, второй адрес char был больше. Я пробовал то же самое на компьютере в моем университете, и все было в порядке. Вы знаете, почему это так? Я на Ubuntu 13.04 64bit.
Я не думаю, что понимаю, почему возникает проблема, но я думаю, что GCC может иметь какое-то отношение к этому ... Вот сравнение между GCC и Clang.
$ gcc -o test.gcc test.c
$ ./test.gcc
Size a: 4
size b: 4
Address a: 0x7fffeef71488
Address b: 0x7fffeef7148c
$ clang++ -o test.clang test.c
$ ./test.clang
Size a: 4
size b: 4
Address a: 0x7fff664573f8
Address b: 0x7fff664573f4
Компилятор и его версия, которую вы используете в uni, может быть здесь переменной.