在 C99 中另一个新的特性称之为指定性初始化. 指定性初始化使你能够初始化特定的数组元素而无需初始化整个数组. 假设你有一个具备5个元素地数组,而你需要仅仅初始化第2,4个元素, 并且将其他元素保持未初始化. 在 C++ 和 C89, 你不能这样做. 但是, C99 定义如下句法构造:
int arr[5]={[1]=10,[3]=20}; /*designated initializers*/
元素 arr[1] 和 arr[3] 初始化为 10 和 20, 其他元素保留未初始化状态. 该特性对于维护稀疏数组十分有用.
C99 也定义了用于进行结构和联合指定初始化的格式:
struct Person
{
char name[20];
int ID;
int age;
FILE *record;
};
Person p = {.ID=0, .record=NULL};
这个例子里面, 元素 name 和 age 没有被初始化. 指定性初始化只在 C99 提供支持.