关于变量初始化的一个问题

NeilHappy 2013-03-25 10:22:37
刚才写程序的时候,想着这些变量之后要用,就没有进行初始化。用gdb查看变量(断点设在对这些变量赋值之前)的时候突然发现这么一个现象:

int a[MAX][MAX]={0};
int N,num;
int IndexRow;
int IndexColumn;
int TempRow;
int TempColumn;


第一个二维数组被初始化后,居然连后面的N,num,IndexRow等变量都被初始化了。
而将第一个二维数组注释后,则后面的变量有的为0,有的为随机数。
我觉得很奇怪,但不知道为什么,想请教大家。
...全文
211 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zx444896008 2015-04-27
  • 打赏
  • 举报
回复
难道不是先初始化默认值,再给指定初始值的变量赋予指定的值,这个过程吗. 没研究过c的初始化过程,说得不对还请见谅
haierpro 2013-03-25
  • 打赏
  • 举报
回复
值为零不一定就是被初始化了,或许这段内存本来就为零。有数组时,数组就把其他变量项得更靠栈顶了。 你可以在调用这个函数之前再调用一个测试函数,在测试函数中定义一个比 int a[MAX][MAX]={0};更大的数组,然后把数组都赋上一个确定的非零值,然后再进行你的测试,看看什么结果,你就明白了。
lin5161678 2013-03-25
  • 打赏
  • 举报
回复
编译器喜欢这么做而已 需要注意的是 不要利用这个不靠谱的特性就好了 该初始化还是自己初始化 不想初始化 就不写了
derekrose 2013-03-25
  • 打赏
  • 举报
回复
我只能说,楼上三位说得对!
赵4老师 2013-03-25
  • 打赏
  • 举报
回复
其实电脑开机后物理内存的每个字节都是可读写的,区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。
jdwx 2013-03-25
  • 打赏
  • 举报
回复
完全就是赶巧碰上了。
图灵狗 2013-03-25
  • 打赏
  • 举报
回复
其实纠结这些问题没有任何意思,局部变量不初始化的话,取决于当时栈中的数据,当二维数组存在时,刚好栈中后面的数据尚未用到恰好是0而已。
NeilHappy 2013-03-25
  • 打赏
  • 举报
回复
谢谢各位了,我明白了。不过确实是个挺奇妙的特性。

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧