Предположим, у меня есть следующий код C
#include <stdio.h>
int main(){
int a = 5;
int b = 6;
int c = 7;
void *d = &a;
long *ld = (long *)d;
printf("%ld\n", *ld);
return 0;
}
Выполняя sizeof
с использованием gdb
, я вижу, что int
- это 4 байта, а long
- это 8 байтов на моемlittle endian, x64 machine.
Вывод вышеприведенного printf
равен 5
.
Мой вопрос: как значение 5, несмотря на тот факт, что мой указатель ld
теперь 64 бита и указывает на первый байт a
(32-битный переменный).Как это не переполняется, когда я разыменую это?Как это не включает байты в b
и c
?Откуда он знает, что после 32-х битного счета перестать считать, хотя это 64-битный указатель?