c语言数组初始化未赋值则默认是任意还是0?

clleady 2009-07-12 09:12:12
c语言数组初始化未赋值则默认是任意还是0?
int s[2];
printf("%d",s[1]);
输出不是0吗?
...全文
8489 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
blh 2009-07-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 clleady 的帖子:]
c语言数组初始化未赋值则默认是任意还是0?
int s[2];
printf("%d",s[1]);
输出不是0吗?
[/Quote]

如果s是全局变量,那么s就是一个未初始化全局变量,程序加载后会被初始化为全0
如过s是局部变量,那么就是不确定的,需要自己初始化或赋值
ies_sweet 2009-07-12
  • 打赏
  • 举报
回复 1
[Quote=引用 6 楼 esp88 的回复:]
全局,静态变量,一般默认为0;
局部变量在栈上,取决于此处原来的数据,如果不初始化的话;
动态变量在堆上.
[/Quote]

正是如此
一般来说 全局变量、静态变量处于数据区,默认初始化为0 (如果指定初始值,则为指定的值)
而局部变量处于堆栈区,其数值是随机的,即当时内存中的值。

总体来说
不要利用编译器的这种默认原则
而是应当显示的指定
必要的初始化不是笨拙
而是规范
esp88 2009-07-12
  • 打赏
  • 举报
回复
全局,静态变量,一般默认为0;
局部变量在栈上,取决于此处原来的数据,如果不初始化的话;
动态变量在堆上.
Erixus 2009-07-12
  • 打赏
  • 举报
回复
编译的环境不一样,初始的数值应该不同。
如果要全初始化为0;
可以写成 int s[2]={0,0};
在VC下应该也可以写成 int s[2]={0};
stefor 2009-07-12
  • 打赏
  • 举报
回复
一般是分配的内存里的原有数据
pipisi 2009-07-12
  • 打赏
  • 举报
回复
如果数组是局部变量,那么是任意值
meipen 2009-07-12
  • 打赏
  • 举报
回复
取决于所用编译器
我知道TC下的基本不是,所以变量最好自己初始化
haierpro 2009-07-12
  • 打赏
  • 举报
回复
这个不一定,好像依赖于具体的编译器和系统

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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