三千芳华 发表于 2018-6-5 13:35:09

错误初始化指针事例的问题

本帖最后由 三千芳华 于 2018-6-5 13:50 编辑

#include<stdio.h>
int main()
{
        int i=10,j;
        float *pf;
        pf=&i;
        j=*pf;
        printf("i=%d\tj=%d\n",i,j);
        return 0;
}
这个书上说这样做运行结果是i=10,j=0;
为什么啊?
顺便这样搞我的dev c++直接报错,改成int就OK了。但是为啥能运行就会是j=0呢?{:10_266:}

人造人 发表于 2018-6-5 13:50:24

要确保你的源文件是 .c 文件
.cpp 是C++的,C++对类型要求严格

三千芳华 发表于 2018-6-5 13:52:12

人造人 发表于 2018-6-5 13:50
要确保你的源文件是 .c 文件
.cpp 是C++的,C++对类型要求严格

哦哦,这样啊。那为啥是j=0啊

人造人 发表于 2018-6-5 14:13:48

三千芳华 发表于 2018-6-5 13:52
哦哦,这样啊。那为啥是j=0啊




在地址栏输入 &i (取变量 i 的地址),然后回车
变量 i 的地址是 0x001CFED8
变量 i 中存储的值是 0a 00 00 00 ,这个值就是十进制的 10(能理解这个吗?)





在地址栏输入 pf ,然后回车
pf 中保存的值是 0x001CFED8,这说明 pf 指向变量 i



可以看到,pf 中保存的地址和变量 i 的地址一样




float 占 4 个字节,也就是把 0a 00 00 00 以浮点数格式解释








人造人 发表于 2018-6-5 14:15:57

后面的我不知该如何解释了
你那里不明白的话,把你的问题提出来
^_^

三千芳华 发表于 2018-6-5 14:16:31

人造人 发表于 2018-6-5 14:13
在地址栏输入 &i (取变量 i 的地址),然后回车
变量 i 的地址是 0x001CFED8
变量 i 中存储的值是 ...

我去,这么多,造人大佬有你真好,万分感谢{:10_254:}

人造人 发表于 2018-6-5 14:20:47



把 0a 00 00 00 以浮点数格式解释
就是 1.401e-44#DEN


DEN 一个无限接近 0 的值
把这个值转换成整数,结果就是 0

三千芳华 发表于 2018-6-5 19:27:58

人造人 发表于 2018-6-5 14:20
把 0a 00 00 00 以浮点数格式解释
就是 1.401e-44#DEN



我研究研究{:10_256:}
页: [1]
查看完整版本: 错误初始化指针事例的问题