理解带有指针的 C 代码的输出
Understand the output of a C code with pointers
我想了解这个程序中发生了什么。输出为 -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 指针:
char *p = (char *) &a;
现在指向 0x387
的 LSB,读取 0x87
,当被视为有符号字符时,您会得到 -121
。然后你前进到 MSB(通过递增指针)。
printf("%d ",*p++);
现在您读取 MSB,即 3。
printf("%d",*p);
但是,将 int*
转换为 char*
并不是一个好主意。
我想了解这个程序中发生了什么。输出为 -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 指针:
char *p = (char *) &a;
现在指向 0x387
的 LSB,读取 0x87
,当被视为有符号字符时,您会得到 -121
。然后你前进到 MSB(通过递增指针)。
printf("%d ",*p++);
现在您读取 MSB,即 3。
printf("%d",*p);
但是,将 int*
转换为 char*
并不是一个好主意。