我试图了解这个程序中发生了什么。输出为-121 3
。我们如何获得这个输出?
#include <stdio.h>
int main(void) {
int a = 903;
char *p = (char *) &a;
printf("%d ",*p++);
printf("%d",*p);
return 0;
}
最佳答案
那么会发生什么......
<小时/>903
等于十六进制的 0x387
。
int a = 903;
<小时/>
您创建一个指向它的指针,并将其转换为有符号的字符指针:
char *p = (char *) &a;
<小时/>
现在指向0x387
的LSB,它读取0x87
,当被视为有符号字符时,你会得到-121
。然后前进到 MSB(通过递增指针)。
printf("%d ",*p++);
<小时/>
现在您读取 MSB,即 3。
printf("%d",*p);
<小时/>
但是,将 int*
转换为 char*
并不是一个好主意。
关于c - 了解带有指针的 C 代码的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27880668/