B.5.16 复合常量

复合常量是括在圆括号中的类型名称,之后跟有初始化列表。它创建一个未命名的具有特定类型的值,该值的作用域限于定义它的程序块内,如果在任何程序块之外定义它,则具有全局作用域。在后一种情况下,复合常量的初始值必须全都是常量表达式。

作为一个例子,


(struct point){.x=0,.y=0}


是一个用于产生结构的表达式,该结构的类型为struct point并且具有指定的初始值。这个表达式可以赋值给另一个struct point结构,如下:


origin=(struct point){.x=0,.y=0};


此外,还可将它传递给期望接受struct point参数的函数或方法,如下:


moveToPoint((struct point){.x=0,.y=0});


还可定义非结构的其他类型,如,如果intPtr是int*类型的,则语句


intPtr=(int[100]){[0]=1,[50]=50,[99]=99};


(这条语句可以出现在程序的任何位置)设置intptr使其指向一个包含100个整数的数组,它的3个元素初始化为特定的值。

如果没有指定数组的大小,则是由初始化函数列表确定的。