C语言初始化数组时,一定要使用静态存储吗?

在网上看到这个:初始化数组时,未使用静态存储inta[3]={0,1,2};这样初始化数组是不对的。C语言规定只有静态存储(static)数组和外部存储(extern)数... 在网上看到这个:
初始化数组时,未使用静态存储
int a[3]={0,1,2};
这样初始化数组是不对的。C语言规定只有静态存储(static)数组和外部存储(extern)数组才能初始化。应改为:
static int a[3]={0,1,2};

真的是这样吗?谭浩强那本书上说,可以在定义数组时初始化,如:
int a[3] = {0,1,2};

为什么我在网上搜到的会是上面的说法呢?那种是对的?
C语言是不是不能这样给数组赋值:
main()
{
int a[3];
a[3] = {0,1,2};
}

哪位大虾帮我解释一下好吗?
main()
{
int a[3];
a[3] = {0,1,2};
}

这样是不行的吧?
那么:
main()
{
static int a[3];
a[3] = {0,1,2};
}
这样行不行呢?
展开
 我来答
day9981
推荐于2017-10-15 · TA获得超过1816个赞
知道小有建树答主
回答量:345
采纳率:0%
帮助的人:0
展开全部
ANSI/ISO C之前,对数组的一次性初始化必须要求数组被声明为静态的,楼上说static和extern与变量的使用范围有关,没错,但不是这里要使用的含义,这里静态(全局变量默认为静态的)指的是该变量只初始化一次。全局变量肯定是只初始化一次的,所以这主要是针对函数块里面声明的变量来说的,就是说在函数块里面声明的静态局部变量,只在第一次进入这个函数块的时候才进行初始化。ANSI/ISO C允许对声明的非静态数组也进行一次性初始化。所以在支持ANSI/ISO C标准的编译环境下,函数块内写
static int a[3] = { 2, 4, 5 };

int a[3] = { 2, 4, 5 };
都对。
函数块外面写static时才是楼上所说的变量的适用范围,不加static声明出来的变量的范围可以在文件之间,加了static声明的变量则只在该文件内。但此时,你加不加static都不会影响你写int a[3] = { 2, 4, 5 };因为这个时候a是全局变量,默认的是静态的,这样的初始化当然没有问题的。

另外,这种一次性初始化必须在定义一个变量的时候才是允许的。这一点,楼主要谨记,不管是ANSI/ISO C还是C99都是不允许出现
int a[3];
a[3] = { 2, 4 , 5 }
的,不管有没有static修饰。如果你不想在定义的时候初始化,那就只有等到你需要的时候通过赋值操作来进行,数组当然得通过循环。
投机士
推荐于2017-10-02 · TA获得超过10.5万个赞
知道大有可为答主
回答量:2.5万
采纳率:0%
帮助的人:3924万
展开全部
数组在定义时并没有强制要求要初始化,可以需要时再赋值
综上,C语言中数组可以不初始化
其次,在C语言中,数组归于布局数据类型。一个数组能够分化为多个数组元素,这些数组元素能够是根本数据类型或是布局类型。因而按数组元素的类型不一样,数组又可分为数值数组、字符数组、指针数组、布局数组等各种种类。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
inyellow
2007-01-09 · TA获得超过134个赞
知道答主
回答量:268
采纳率:0%
帮助的人:223万
展开全部
定义时初始化应该写成
int a[]={1,2,3}
或者用new运算符来实现.
C++里是这样的,至于C我就不清楚了.
当然不行,a[3]={1,2,3}是什么句子啊!!!a又不是二维数组.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fengjian_net
2007-01-10 · TA获得超过2864个赞
知道大有可为答主
回答量:1799
采纳率:50%
帮助的人:2509万
展开全部
无论是静态,局部还是全局数组只有在定义时才能初始话,否则必须通过其它方法,如循环操作实现。
如:
int a[] = {1, 2, 3};
static int b[3] = { 1, 2};
上面是在数组定义时初始化,因而正确

任何
int a[3];
static int b[3];
a[3] = {1, 2, 3};
b[3] = {1, 2, 3};
没有在定义时初始化都是错误的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
55696550
2007-01-16
知道答主
回答量:65
采纳率:0%
帮助的人:17万
展开全部
不管是什么变量都应该先定义后赋值
而且赋值要符合变量定义
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式