在使用int类型指针取消引用char值时获取垃圾



为什么c 中变量的数据类型及其指针应该相同

#include<stdio.h>
int main()
{
    char testvar = 9;
    int * testptr = &testvar;
    printf("testvar = %d", *testptr);
    return 0;
}

它的打印垃圾价值为什么??

您初始化了一个字节并打印了四个字节,所以其他三个字节是任意的。

试试这个:

int testvar = 9;

这将初始化四个字节。

或者这个:

char testvar = 9;
char dummy1 = 0;
char dummy2 = 0;
char dummy3 = 0;
int * p = (int *)& testvar;

根据堆栈的布局方式,可能会得到您想要的东西(取决于平台、编译器和优化)这是非常非常糟糕的编程实践。不要在生产代码中做这种事情

也不要在家庭作业中这样做。这是一种你玩的东西,只是为了看看当你学习指针如何工作时会发生什么。

最新更新