冷月孤心 发表于 2015-1-20 11:19:55

初学者C语言学习中的一个简单困惑解答

main()
{
   int a;
   int b;
   b = a;
   scanf("%d",&a);
   printf("this is a = %d\n",a);
   printf("this is b = %d\n",b);
}

----------------------------------------------------------------------------------------------------------
main()
{
   int a = 0;
   int b;
   b = a;
   scanf("%d",&a);
   printf("this is a = %d\n",a);
   printf("this is b = %d\n",b);
}


----------------------------------------------------------------------------------------------------------
main()
{
   int a;
   int b = 0;
   b = a;
   scanf("%d",&a);
   printf("this is a = %d\n",a);
   printf("this is b = %d\n",b);
}


---------------------------------------------------------------------------------------------------------------
main()
{
   int a;
   int b = 0;
   scanf("%d",&a);
   b = a;
   printf("this is a = %d\n",a);
   printf("this is b = %d\n",b);
}



------------------------------------------------------------------------------------------------------------------
由以上现象总结了一下,不能在获取输入之前给申请的内存空间赋一个变量值.逻辑上就是错误的.a的数据在scanf之前都是未知的.只是某一个内存块.那么,把a的值写入到b,究竟写入了什么?谁也没办法想出来.校长说计算机是跟着人的逻辑走的,在人的逻辑层理解不了的东西,计算机肯定也理解不了.相当正确.感谢校长视频中用自己的方式把一些书面语解释为菜鸟能看得懂的语言.

zenix 发表于 2015-1-20 11:29:15

變量未初始化的話,就直接沿用內存裏面原來的值。

sgw888 发表于 2015-1-20 11:37:20

变量就是内存,从OD的角度说,局部变量一般就是栈空间,内存里的数据在没有初始化之前都是随机的,都是不可知的。用过的内存在释放以后,里面的数据并没有被清零,所以,这个应该很容易理解。

kGe 发表于 2015-1-20 18:21:58

int b=0;

kGe 发表于 2015-1-20 18:22:03

int b=0;

kGe 发表于 2015-1-20 18:24:15

我前段时间写那个keygen时 win32 ok。result regcode,MFC在第一次执行完毕,第二次运算注册码注册码变化无穷的其中一个原因就是变量被分配的内存数据没情0

GeekCat 发表于 2015-1-20 19:41:53

昨天我就遇上这个问题
没有初始化变量就用了,出来的值怎么样都不对
最后问冷大才知道
谢谢!

lhglhg 发表于 2015-1-21 00:04:57

本帖最后由 lhglhg 于 2015-1-21 00:06 编辑

用VC编译的第1种,运行可以得到正确的B值

int a;
int b ;
scanf("%d",&a);
b = a;
printf("this is a = %d\n",a);
printf("this is b = %d\n",b);

难道跟编译器有关系?

lucky_789 发表于 2015-1-21 03:26:26

未初始化的变量就是垃圾数据

lucky_789 发表于 2015-1-21 03:28:29

你把a设为全局变量再试试是否为0。。。。
页: [1] 2
查看完整版本: 初学者C语言学习中的一个简单困惑解答