9.8 数组类型的字面量(C99)
除了结构体类型的字面量,C99也允许数组类型的字面量。
由于数组通常是由多个数据组成的,所以也需要用一种方式把这些数据“组合”在一起。C语言通过运算符“{}”把数据组织在一起。此外还要表明这种数据的类型,C语言用类型转换运算实现。如:
这表示一个由3、4组成的一个一维数组,然而这个数组没有自己的数组名。但它能进行和数组名能进行的相同的运算,比如作为一个实参。也就是说,这个数据具有和数组名同样的类型。
本质上“(){}”是C99中的一个运算符,在C99中,“(){}”是优先级最高的运算之一。
数组字面量也属于复合字面量(Compound literals)的一种,这种复合字面量很像一种具有数组类型的“常量”。但是从根本上来说,这种量并不同于“5”、“3.14”这样的常量。复合字面量最本质的特点是没有相应的标识符而是直接写出的,这就是“literal”的含义。
由于没有相应的标识符,所以数组类型的字面量最常见的用法要么是作为函数的实参、要么是把值赋给指针。下面的代码演示了数组类型复合字面量的用法。
程序代码9-28
运行结果如图9-27所示。
图 9-27数组类型的字面量
复合字面量也有自己的生存期,其生存期与对应的局部变量类似。