🍌复合字面量
2021-1-22
| 2023-8-2
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
假设给带int类型形参的函数传递一个值,要传递int类型的变量,但是也可以传递int类型常量。在C99 标准以前,对于带数组形参的函数,情况不同,可以传递数组,但是没有等价的数组常量。C99新增了复合字面量。
字面量是除符号常量外的常量。例如:81.3是double类型的字面量,'Y'是char类型的字面量,"elephant"是字符串字面量。发布C99标准的委员会认为,如果有代表数组和结构内容的复合字面量,在编程时会更方便。
对于数组,复合字面量类似数组初始化列表,前面是用括号括起来的类型名。下面是一个普通的数组声明:
 
下面的复合字面量创建了一个和diva数组相同的匿名数组,也有两个int类型的值:
初始化有数组名的数组时可以省略数组大小,复合字面量也可以省略大小,编译器会自动计算数组当前的元素个数:
 
因为复合字面量是匿名的,所以不能先创建然后再使用它,必须在创建的同时使用它。使用指针记录地址就是一种用法。也就是说,可以这样用:
与有数组名的数组类似,复合字面量的类型名也代表首元素的地址,所以可以把它赋给指向int的指针。然后便可使用这个指针。例如,*pt1是10,pt1[1]是20。
 
还可以把复合字面量作为实际参数传递给带有匹配形式参数的函数:
这里,第1个实参是内含6个int类型值的数组,和数组名类似,这同时也是该数组首元素的地址。这种用法的好处是,把信息传入函数前不必先创建数组,这是复合字面量的典型用法。
 
可以把这种用法应用于二维数组或多维数组。
 
  • C
  • 指针和多维数组字符串
    目录