【发布时间】:2021-09-05 18:20:12
【问题描述】:
考虑下面的代码 sn-p:
int *p=NULL,*t=NULL,e;
char l=65;
char *k=&l;
p=(int*)&l;
t=(int*)k;
e=*t;
printf("%d\n",*p);
printf("%d\n",*t);
printf("%d\n",e);
上述sn-p的输出如下:
16705
16705
65
现在很明显,&l 是一个 char 的地址,p=(int*)&l 让一个 int 指针,即 p 指向同一个位置,这与指针 t 相同。现在,如果我正确取消引用 p ,它将尝试取消引用 4 个连续的内存块(假设 int 指向 4 个字节)并打印出 *t 也会发生的各种垃圾值,但是当我打印 e 时,我得到 65让我感到困惑的是 e=*t 应该与 *p 或 *t 相同?
【问题讨论】:
-
修正您在该段中的第二条语句,“现在如果我取消引用 p... 我将调用未定义的行为,并且无法再对我的代码的行为得出任何结论”