鱼C论坛

 找回密码
 立即注册
查看: 2513|回复: 8

S1E21习题第7题,为啥我在LINUX上执行的结果总是这个?

[复制链接]
发表于 2019-12-6 16:16:22 | 显示全部楼层 |阅读模式
1鱼币
习题代码如下:
#include <stdio.h>

int main()
{
        int *a;

        printf("%p\n", a);

        return 0;
}

习题问题是:请问为什么每次执行上边代码都会得到不同的结果?

我认为每次执行重新定义变量a,其地址会变化,但实际在LINUX上执行的结果如下:
res.PNG

我照抄的代码如下:
daima.PNG

请问这是神马情况?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-6 16:50:36 | 显示全部楼层
本帖最后由 jackz007 于 2019-12-6 22:19 编辑

       a 是个指针,语句 int * a 只能为这个指针分配存储空间,可是,这个指针并没有被初始化,就是说,还没有指向任何一个内存单元,所以,指针的值不确定。就好比你定义了一个整型变量,并没有给它赋值,却要打印出这个变量的值,这个值究竟是多少在打印前谁都不知道。
       只要把 a 指向一个内存地址,然后再打印就有谱了。

  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int * a , b = 8888                      ;
  5.         a = & b                                 ;
  6.         printf("a = %p , * a = %d\n", a , * a)  ;
  7.         return 0                                ;
  8. }
复制代码

        编译、运行实况:
  1. C:\Bin>g++ -o x x.c

  2. C:\Bin>x
  3. a = 0028FED8 , * a = 8888

  4. C:\Bin>
复制代码


        Linux 系统编译、运行效果应该和上面没有实质性差别。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-7 09:33:49 | 显示全部楼层
这个“随机”使用的是随机算法,seed固定为1,结果当然相同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-12-7 11:31:00 | 显示全部楼层
jackz007 发表于 2019-12-6 16:50
a 是个指针,语句 int * a 只能为这个指针分配存储空间,可是,这个指针并没有被初始化,就是说,还 ...

这个我明白,但是我和题目里运行的同样的代码,为啥我的结果跟小甲鱼得到的不一样呢,他的每次打印a的值都是变化的,而我的都是(nil),(nil)是啥意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-12-7 11:31:40 | 显示全部楼层
TCY 发表于 2019-12-7 09:33
这个“随机”使用的是随机算法,seed固定为1,结果当然相同

seed是啥?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-12 13:29:07 | 显示全部楼层

随机种子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-12-12 20:30:29 | 显示全部楼层

额,为啥我学的时候完全没涉及到?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-14 09:09:24 | 显示全部楼层
dequantianhe 发表于 2019-12-12 20:30
额,为啥我学的时候完全没涉及到?

这是我用int测试的,不知道是否适用于指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-17 16:28:42 | 显示全部楼层
本帖最后由 fishcyky 于 2019-12-17 16:34 编辑

你这个指针a没有指向的对象,是一个野指针,会随机指向一个内存空间,所以每次运行得到的结果都不同。因为每次运行随机指向的内存空间都不一定相同

你可以试一下最新的gcc编译器,看是否还出现这个问题

望采纳!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 02:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表