c语言静态存储数组的赋值问题。

c语言规定,只有静态存储数组才能初始化,静态存储数组要用static定义,为什么谭浩强的书在定义字符数组时从来不用static,而是直接赋值?

使用static定义静态数组,这个数组就会在程序的整个生命周期里存在,并且这个数组会分配并放在程序的.bss段中,这个段中的所有数据都是会被自动初始化为0的,如果是声明在函数中,那么调用这个函数每次使用的数组都是同一个数组,如果不是在函数中定义,那么这个数组就仅限于在此文件中可用。

而没有static声明的数组,这个数组会在调用这个函数所在的栈帧中分配,也就是在栈上分配,这个数组就不会被初始化,数组中的值是随机的,如果在函数中定义,那么调用这个函数时每次使用的数组一般是不同的。

至于要不要用static来声明,一方面是看你是否需要这个数组被长久使用,另一方面就是看是否需要让它自动初始化为0,还有就是在其他文件中是否需要使用这个数组。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-13
静态数组和动态数组都可以初始化,只不过动态数组在定义时如果没有初始化,数组元素的值是随机值,而静态数组在定义时如果未初始化,编译器会自动把数组元素置0。
比如int a[10] 数组元素的值不确定是随机值,可能是-8997777666之类。
static int a[10] 数组所有元素的值为0。本回答被网友采纳
第2个回答  2012-08-17
动态数组与静态数组都可以初始化,要养成加static的好习惯,通常全局变量不确定的都要加static,这样比较保险,这样做是为了满足程序的借口最小化原则,是变量的名字只是在翻译单元内可见。改变了变量的链接属性,即翻译单元外的其他程序不可以直接使用该变量。

但是不加static也是正确的,只是加上比较保险一点
第3个回答  2012-08-13
静态数组也是可以初始化
第4个回答  2012-08-13
”只有静态存储数组才能初始化“这句话是哪里的?
相似回答