S1E21习题第7题,为啥我在LINUX上执行的结果总是这个?
习题代码如下:#include <stdio.h>
int main()
{
int *a;
printf("%p\n", a);
return 0;
}
习题问题是:请问为什么每次执行上边代码都会得到不同的结果?
我认为每次执行重新定义变量a,其地址会变化,但实际在LINUX上执行的结果如下:
我照抄的代码如下:
请问这是神马情况? 本帖最后由 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 系统编译、运行效果应该和上面没有实质性差别。
这个“随机”使用的是随机算法,seed固定为1,结果当然相同 jackz007 发表于 2019-12-6 16:50
a 是个指针,语句 int * a 只能为这个指针分配存储空间,可是,这个指针并没有被初始化,就是说,还 ...
这个我明白,但是我和题目里运行的同样的代码,为啥我的结果跟小甲鱼得到的不一样呢,他的每次打印a的值都是变化的,而我的都是(nil),(nil)是啥意思? TCY 发表于 2019-12-7 09:33
这个“随机”使用的是随机算法,seed固定为1,结果当然相同
seed是啥?{:10_312:} dequantianhe 发表于 2019-12-7 11:31
seed是啥?
随机种子 TCY 发表于 2019-12-12 13:29
随机种子
额,为啥我学的时候完全没涉及到? dequantianhe 发表于 2019-12-12 20:30
额,为啥我学的时候完全没涉及到?
这是我用int测试的,不知道是否适用于指针 本帖最后由 fishcyky 于 2019-12-17 16:34 编辑
你这个指针a没有指向的对象,是一个野指针,会随机指向一个内存空间,所以每次运行得到的结果都不同。因为每次运行随机指向的内存空间都不一定相同
你可以试一下最新的gcc编译器,看是否还出现这个问题
望采纳!!!
页:
[1]