c - 了解带有指针的 C 代码的输出

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

最佳答案

那么会发生什么......

<小时/>

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/

相关文章:

c - 如何用原始 C 编写 COM 服务器?

pointers - 在 Go 中,结构指针不是引用类型吗?

c++ - GCC 和自定义指针中 libstdc++ 的 basic_string 实现

c++ - 从 C/C++ 中的 ** 矩阵中提取行/列

c - 箭头运算符与点运算符

c++ - 如何处理 OpenMP 并行代码中的返回?

c++ - 如何使用Windows api中的参数执行线程?

c - C 标准和 C POSIX 中的 IO

c - c中的重入函数是什么?

c - 如何打印字符*