数组初始化
int arr[6] = { [0]=5, [1]=6, [3] =10, [4]=11 }; 或
int arr[6] = { [0]=5, 6, [3] =10, 11 }; 或
int arr[6] = { [3] =10, 11, [0]=5, 6 }; (指定顺序可变)
均等效于:int arr[6] = {5, 6, 0, 10, 11, 0};
Note:
- 若在某个指定初始化项目后跟有不至一个值,如
[3]=10,11
。则多出的数值用于对后续的数组元素进行初始化,即数值 11 用来初始化 arr[4]。 - C 数组初始化一个或多个元素后,未初始化的元素将被自动地初始化为 0 或 NULL(针对指针变量)。未经过任何初始化的数组,所有元素的值都是不确定的。
GNU C 还支持[first … last]=value
(…
两侧有空格) 的形式,将该范围内的若干元素初始化为相同值。如:
int arr[]={ [0 ... 3]=1, [4 ... 5]=2, [6 ... 9] =3}; 或
int arr[]={ [0 ... 3]=1, [4 ... 5]=2, [6 ... 8] =3, [9] =3};
均等效于:int arr[10] = {1, 1, 1, 1, 2, 2, 3, 3, 3, 3};
结构体初始化
对于结构体
struct Structure{ int a; int b; }; 或
struct Structure{ int a, b; };
有以下几种初始化方式:
用.fieldname=指定待初始化成员名
(成员初始化顺序可变),推荐使用的方式,该方式初始化时不必严格按照定义时的顺序,灵活性很高。
struct Structure tStct = {
.a = 1,
.b = 2
};
用fieldname:指定待初始化成员名
(成员初始化顺序可变),GCC 2.5 已废除,但仍接受
struct Structure tStct = {
a : 1,
b : 2
};
用初始化列表初始化
struct Structure tStct = { 1, 2 };
结构体数组初始化
方法一:
struct Structure ptStct[10] = {
[2].b = 0x2B, [2].a = 0x2A,
[0].a = 0x0A };
方法二:该方法可以用于清除结构体。
memset(ptStct, 0, sizeof(struct Structure) * 10);
联合体初始化
可用.fieldname
(或已废弃的fieldname:
) 指示符来指定使用联合体的哪个元素,如:
union UnionT { int i; double d; };
union UnionT tUnion = { .d = 4 };