用指针理解C代码的输出

时间:2015-01-10 20:05:22

标签: c 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

1 个答案:

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