c语言数组定义初始化
㈠ 在C语言中数组的初始化是如何定义的
变量可以在定义的时候初始化,数组也可以。array[5]={1,2,3,4,5};
在定义数组时,可以用放在一对大括号中的初始化表对其进行初始化。初始化值的个数可以和数组元素个数一样多。
如果初始化的个数多于元素个数,将产生编译错误;如果少于元素个数,其余的元素被初始化为0。
如果维数表达式为空时,那么将用初始化值的个数来隐式地指定数组元素的个数,如下所式:nt array[]={1,2,3,4,5};
这也表明数组 array元素个数为5。main()
}
int i,array[]={1,3,5,7,9,11}; for(i=0;i<5;
printf(%d,array[i]); r(i=0;i<5;i++) p
printf(\n);
最终结果为13579
㈡ C语言数组的初始化表示方法
C语言数组的初始化表示方法有4种,分别是:
1、定义的同时进行初始化,我们同样用数组的初始化引出结构体的初始化,我们知道数组在定义的同时进行初始化的代码如下:
int nums[] = {1, 3, 5};
由此可推出结构体在定义的同时进行初始化的代码如下:
struct Person p = {"lee", 23, 1.8};
2、先定义再进行初始化,这种初始化方法其实昨天的内容里已经写过了,代码如下:
struct Person p;
p.name = "lee";
p.age = 23;
p.height = 1.8;
我们知道数据定义好后就不能对其进行一次性初始化了,比如如下代码是编译不通过的。
int nums[3];
num = {1, 2, 3}
3、第三种结构体比较例外,它可以这样做,只不过需要对其进行一下强制类型转换,代码如下:
struct Person p;
p = (struct Person){"xq, 8, 8.8}
4、指定将数据赋值给指定的属性,数组中我们见过这种写法,代码如下:
int nums[3] = {[0] = 2, [2] = 1, [1] = 2};
我们可以为不同的索引指定值,并不需要一定要按顺序来,所以数组可以,结构体是否可以呢,当然,代码如下:
struct Person p = {.height = 1.8, .name = "lee", .age = 23};
㈢ 【C语言】初始化数组,C语言中初始化特定列表和元素!
如果没有显式地初始化数组变量,那么就会采用一般规则:如果数组具有动态存储周期,那么数组元素的值就是没有定义的。否则,所有的元素都会被默认地初始化为 0(如果数组元素是指针,则会被初始化为NULL)。
当在定义数组时,若要显式地初始化数组,必须使用初始化列表(initialization list):这是用逗号分隔开的初始化器(initializer)列表,也就是将每个数组元素的初始值放在大括号 {} 内。如下所示:
int a[4] = { 1, 2, 4, 8 };
上述定义使得数组 a 中的元素具有下面的初始值:
a[0] = 1, a[1] = 2, a[2] = 4, a[3] = 8
当初始化一个数组时,请注意下面的规则:
(1) 不能在定义长度可变数组时,进行初始化操作。
(2) 如果数组具有静态存储周期,那么该数组的初始化器必须是常量表达式。如果数组具有动态存储周期,那么可以在初始化器中使用变量。
(3) 如果提供了初始化列表,那么可以在数组定义中省略数组长度,数组长度由初始化器列表中最后一个数组元素的索引值决定。例如,前面例子中数组a的定义,等同于下面代码:
int a[ ] = { 1, 2, 4, 8 }; // 有4个元素的数组
(4) 如果一个数组的定义同时包含了对数组长度指定和初始化列表,那么长度是通过方括号内的表达式指定的。任何元素只要在列表中没有对应的初始化器,就会被初始化为 0(对于指针类型,则初始化为 NULL)。如果列表中所包含初始化器比数组元素更多,则多出来的初始化器直接被忽略。
(5) 最后一个初始化值后面如果还有多余的逗号,则忽略此逗号。
根据这些规则,下面的定义都是等价的:
int a[4] = { 1, 2 }; int a[] = { 1, 2, 0, 0 }; int a[] = { 1, 2, 0, 0, }; int a[4] = { 1, 2, 0, 0, 5 };
在最后一行代码的数组定义中,初始化器5被忽略了。当这种不匹配的情况发生时,大多数编译器会发出警告。
数组的初始化器必须与数组元素具有相同的类型。如果数组元素类型是联合、结构或者数组类型,那么每个初始化器则又会是另一个初始化列表。例如:
typedef struct { unsigned long pin; char name[64]; /* ... */ } Person; Person team[6] = { { 1000, "Mary"}, { 2000, "Harry"} };
数组的其他 4 个元素会被初始化为 0,按照本例情况,为{0,""}。
可以利用字符串字面量来初始化数组 char、wchar_t、char16_t 或 char32_t。
借助于 C99 新增的元素指示符(element designator),可以把初始化器关联到特定的元素。当需要把特定的元素与初始化器关联时,将其索引值放在方括号内。换句话说,数组元素的元素修饰符一般格式如下:
[常量表达式]
索引值必须是整数常量表达式,在下面的示例中,元素指示符是 [A_SIZE/2]:
#define A_SIZE 20 int a[A_SIZE] = { 1, 2, [A_SIZE/2] = 1, 2 };
该数组在定义时把元素 a[0] 和 a[10] 初始化为 1,把元素 a[1] 和 a[11] 初始化为 2。该数组的所有其他元素都被初始化为 0。在这个例子中,没有元素指示符的初始化器会被关联到前一个初始化元素的下一个元素。
如果在定义数组时没有指定其长度,那么元素指示符的索引值可以是任何的非负整数值。因此,下面的定义会创建一个有 1001 个元素的数组。
int a[ ] = { [1000] = -1 };
所有的数组元素都具有初始值 0,但最后一个元素例外,它的初始值是 -1。