运行如下程序 void main() { int a, b; printf(a=%d,b=%d ,a,b); } 会发现a和 b都会显示出一个值,

[复制链接]
查看11 | 回复6 | 2011-10-16 03:02:53 | 显示全部楼层 |阅读模式
这说明a和b这两个变量空间中是存有数据的,但明明在程序中还没有给变量a和b赋值,请问为什么会有这样的结果?将程序按如下形式修改后运行,对于显示的结果(sum的值)如何理解?#includestdio.hvoidmain(){inta,b,sum;printf(\"a=%d,b=%d\\n\",a,b);sum=ab;printf(\"sum=%d\\n\",sum);}为什么这个程序无论重新编译运行多少次但变量存储的始终都是同样的值?
回复

使用道具 举报

千问 | 2011-10-16 03:02:53 | 显示全部楼层
你没有初始化,堆栈中刚好有值,如果没有其他影响,该值不会变,所以总是一样的
回复

使用道具 举报

千问 | 2011-10-16 03:02:53 | 显示全部楼层
只要你声明,a,b都在内存里面申请了地址,在没被初始化之前,地址里面的值是任意的,因此有值在里面。而对于sum=ab;这样是没意义的,因为a,b都没被初始化,有的编译器还会报错,因此要尽量避免未初始化的变量参与计算,这样有时是很危险的
回复

使用道具 举报

千问 | 2011-10-16 03:02:53 | 显示全部楼层
up
回复

使用道具 举报

千问 | 2011-10-16 03:02:53 | 显示全部楼层
定义变量时,系统会申请一块内存来存放定义的变量,这块申请的内存会有残留值,如果你不给变量初始化,那么变量的值就是残留的值,毫无意义,而且你是输出未初始化的变量,系统不会提示什么,如果用未初始化的变量参与复杂运算,可能导致系统崩溃。好的编程习惯是定义时就初始化,如果定义时不能确定初始值的,可以初始化为0。
回复

使用道具 举报

千问 | 2011-10-16 03:02:53 | 显示全部楼层
这个跟编译器有关系的。。。。因为你没有对变量赋初值。。。。他们的值就是不确定的。。。。我运行了就不是一样的值。。。。
回复

使用道具 举报

千问 | 2011-10-16 03:02:53 | 显示全部楼层
运行如下程序voidmain(){inta,b;printf(\"a=%d,b=%d\\n\",a,b);}会发现a和b都会显示出一个值,huang,色,自,拍,迷,奸,少,妇小说,老外现代情,人经典港台秘书韩片洞房高清,电影UIO。http://www.3456se.com。YTU天天更新4F4o1d5j
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行