Программа:
#include<stdio.h>
int main(void) {
int x[4];
printf("%p\n", x);
printf("%p\n", x + 1);
printf("%p\n", &x);
printf("%p\n", &x + 1);
}
Вывод:
$ ./a.out
0xbff93510
0xbff93514
0xbff93510
0xbff93520
$
Я ожидаю, что выйдет следующая версия программы. Например:
x // 0x100
x+1 // 0x104 Because x is an integer array
&x // 0x100 Address of array
&x+1 // 0x104
Но результат последнего утверждения отличается от ожидаемого. &x
также является адресом массива. Таким образом, увеличивая 1 на этом
будет печатать адрес, увеличенный на 4. Но &x+1
указывает адрес, увеличиваемый на 10. Почему?