- 论坛徽章:
- 0
|
>> char Array[8]={0};
>> 是给整个数组全部赋值为0,还是仅对第一个赋值为0?
首先澄清一个概念:上面不是进行赋值操作,是进行初始化。赋值和初始化是不同的(下面还会看到这一点)。
在定义数组对象的时候,作为一个整体,数组对象要么不被初始化,要么被初始化,不存一部分元素被初始化而另一部分元素没有初始化的情况。
在用户为数组指定初始化值的时候,不必为所有的数组元素提供初始化值,可以只提供前面 n 个元素的值(n>=0),其余的元素将被初始化为 0。
因此,char Array[8]={0}; 的含义是第一个元素按照用户指定的值(0)进行初始化,其余的被初始化为 0。其结果就是整个数组被初始化为 0。char Array[8]={}; 是没有提供任何初始化值,但是指定了数组初始化的情况,其结果和 char Array[8]={0}; 是等同的。
>> 但是 a[4] = {1}; 这个倒不是把所有的数组元素赋值为1,只有第一个
a[4] = {1}; 是赋值操作,但却是非法的表达式,因为 {} 不是运算符。这里是混淆了赋值和初始化的概念。
int a[4] = {1}; 才是对数组进行初始化。其结果是:a[0] 被初始化为 1, a[1]、a[2]、a[3] 都被初始化为 0。
>> char Array[12][8] = {0};
>> 为何GCC会出警告?
应该清楚的是:char Array[12][8] = {0}; 这样的定义数组对象并进行初始化是合法的。GCC 对此发出警告是因为你在编译中使用了 -Wmissing-braces(-Wall 中包含这个警告)参数。产生这个警告并不说明程序是错误的,但是你要注意提供的初始化值和元素的对应关系是否正确。
要避免这个警告,不妨这样对数组初始化:char Array[12][8] = {}; |
|