理解带有指针的 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;
}

Runnable Code at ideone

那么会发生什么...


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* 并不是一个好主意。