dequantianhe 发表于 2019-12-6 16:16:22

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

习题代码如下:
#include <stdio.h>

int main()
{
      int *a;

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

      return 0;
}

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

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


我照抄的代码如下:


请问这是神马情况?

jackz007 发表于 2019-12-6 16:50:36

本帖最后由 jackz007 于 2019-12-6 22:19 编辑

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

#include <stdio.h>

int main()
{
      int * a , b = 8888                      ;
      a = & b                                 ;
      printf("a = %p , * a = %d\n", a , * a);
      return 0                              ;
}
      编译、运行实况:
C:\Bin>g++ -o x x.c

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

C:\Bin>

      Linux 系统编译、运行效果应该和上面没有实质性差别。

TCY 发表于 2019-12-7 09:33:49

这个“随机”使用的是随机算法,seed固定为1,结果当然相同

dequantianhe 发表于 2019-12-7 11:31:00

jackz007 发表于 2019-12-6 16:50
a 是个指针,语句 int * a 只能为这个指针分配存储空间,可是,这个指针并没有被初始化,就是说,还 ...

这个我明白,但是我和题目里运行的同样的代码,为啥我的结果跟小甲鱼得到的不一样呢,他的每次打印a的值都是变化的,而我的都是(nil),(nil)是啥意思?

dequantianhe 发表于 2019-12-7 11:31:40

TCY 发表于 2019-12-7 09:33
这个“随机”使用的是随机算法,seed固定为1,结果当然相同

seed是啥?{:10_312:}

TCY 发表于 2019-12-12 13:29:07

dequantianhe 发表于 2019-12-7 11:31
seed是啥?

随机种子

dequantianhe 发表于 2019-12-12 20:30:29

TCY 发表于 2019-12-12 13:29
随机种子

额,为啥我学的时候完全没涉及到?

TCY 发表于 2019-12-14 09:09:24

dequantianhe 发表于 2019-12-12 20:30
额,为啥我学的时候完全没涉及到?

这是我用int测试的,不知道是否适用于指针

fishcyky 发表于 2019-12-17 16:28:42

本帖最后由 fishcyky 于 2019-12-17 16:34 编辑

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

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

望采纳!!!
页: [1]
查看完整版本: S1E21习题第7题,为啥我在LINUX上执行的结果总是这个?