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