背景
C89标准规定初始化语句的元素以固定顺序出现,该顺序即待初始化数组或结构体元素的定义顺序。
C99标准新增指定初始化(Designated Initializer),即可按照任意顺序对数组某些元素或结构体某些成员进行选择性初始化,只需指明它们所对应的数组下标或结构体成员名。GNU C将其作为C89模式的扩展。
借助指定初始化特性,可实现数组或结构体元素的快速初始化。
1数组初始化
在数组初始化列表中使用“[index常量表达式]=value”形式可对index所指定的某个元素进行初始化。如:
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};
说明:
1) 若在某个指定初始化项目后跟有不至一个值,如[3]=10,11。则多出的数值用于对后续的数组元素进行初始化,即数值11用来初始化arr[4]。
2) C数组初始化一个或多个元素后,未初始化的元素将被自动地初始化为0或NULL(针对指针变量)。未经过任何初始化的数组,所有元素的值都是不确定的。
当下标是字符或属于枚举类型时,标识数组初始化语句的元素特别有用。如:
int whitespace[256] = {
[' '] = 1, [&#