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

时间:2021-11-26 19:51:11
c语言数组初始化未赋值则默认是任意还是0?
int s[2];
printf("%d",s[1]);
输出不是0吗?

8 个解决方案

#1


这个不一定,好像依赖于具体的编译器和系统

#2


取决于所用编译器
我知道TC下的基本不是,所以变量最好自己初始化

#3


如果数组是局部变量,那么是任意值

#4


一般是分配的内存里的原有数据

#5


编译的环境不一样,初始的数值应该不同。
如果要全初始化为0;
可以写成 int s[2]={0,0};
在VC下应该也可以写成 int s[2]={0};

#6


全局,静态变量,一般默认为0;
局部变量在栈上,取决于此处原来的数据,如果不初始化的话;
动态变量在堆上.

#7


引用 6 楼 esp88 的回复:
全局,静态变量,一般默认为0; 
局部变量在栈上,取决于此处原来的数据,如果不初始化的话; 
动态变量在堆上.


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

总体来说
不要利用编译器的这种默认原则
而是应当显示的指定
必要的初始化不是笨拙
而是规范

#8


引用楼主 clleady 的帖子:
c语言数组初始化未赋值则默认是任意还是0?
int s[2];
printf("%d",s[1]);
输出不是0吗?


如果s是全局变量,那么s就是一个未初始化全局变量,程序加载后会被初始化为全0
如过s是局部变量,那么就是不确定的,需要自己初始化或赋值

#1


这个不一定,好像依赖于具体的编译器和系统

#2


取决于所用编译器
我知道TC下的基本不是,所以变量最好自己初始化

#3


如果数组是局部变量,那么是任意值

#4


一般是分配的内存里的原有数据

#5


编译的环境不一样,初始的数值应该不同。
如果要全初始化为0;
可以写成 int s[2]={0,0};
在VC下应该也可以写成 int s[2]={0};

#6


全局,静态变量,一般默认为0;
局部变量在栈上,取决于此处原来的数据,如果不初始化的话;
动态变量在堆上.

#7


引用 6 楼 esp88 的回复:
全局,静态变量,一般默认为0; 
局部变量在栈上,取决于此处原来的数据,如果不初始化的话; 
动态变量在堆上.


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

总体来说
不要利用编译器的这种默认原则
而是应当显示的指定
必要的初始化不是笨拙
而是规范

#8


引用楼主 clleady 的帖子:
c语言数组初始化未赋值则默认是任意还是0?
int s[2];
printf("%d",s[1]);
输出不是0吗?


如果s是全局变量,那么s就是一个未初始化全局变量,程序加载后会被初始化为全0
如过s是局部变量,那么就是不确定的,需要自己初始化或赋值