Если бы я не скомпилировал код, я бы сказал, что 1 и 2 дают тот же результат, так как оба имеют указатель int p указывает на переменную age .Разыменование age в 1 и 2 должно давать одинаковый результат.Я также понимаю, что 3 просто даст мне первый байт переменной age , так как он имеет тип char .Я не могу объяснить, почему 1 и 2 дают разные результаты и почему 2 и 3 дают одинаковый результат.
1
int age = 20;
int* p = (int *)0x66FC9C;
printf("You're : %d\n", *p );
2
int age = 20;
int *p = &age;
printf("You're : %d\n", *p );
3
int age = 20;
char* p = (char *)0x66FC9C;
printf("You're %d\n", *p );
Последующее наблюдение
Это странно, потому что, когда я делаю:
int age1 = 20;
int age2 = 19;
int* p = &age2;
printf("You're %d %d %d %d\n", *p, *(p+1), &age1, &age2 );
и я на самом деле печатаю адреса, которые я всегда получаю p + 1 правильно (что означает, что я могу предсказать адрес), но если я делаю:
int age1 = 20;
int age2 = 19;
int* p = &age2;
printf("You're %d %d\n", *p, *(p+1) );
Я никогда не могу догадаться об этом.Как будто C знает, что за ним наблюдают ... кашель, эксперимент с двойной щелью