博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
复合字面量(compound literal)
阅读量:1871 次
发布时间:2019-04-26

本文共 1181 字,大约阅读时间需要 3 分钟。

C Primer Plus(内容笔记)

假设给带int类型形参的函数传递一个值,要传递int类型的变量,但是也
可以传递int类型常量,如5。在C99 标准以前,对于带数组形参的函数,情
况不同,可以传递数组,但是没有等价的数组常量。C99新增了复合字面量
(compound literal)。字面量是除符号常量外的常量。例如,5是int类型字
面量, 81.3是double类型的字面量,’Y’是char类型的字面量,”elephant”是字
符串字面量。发布C99标准的委员会认为,如果有代表数组和结构内容的复
合字面量,在编程时会更方便。
对于数组,复合字面量类似数组初始化列表,前面是用括号括起来的类
型名。例如,下面是一个普通的数组声明:
int diva[2] = {10, 20};
下面的复合字面量创建了一个和diva数组相同的匿名数组,也有两个int
类型的值:
(int [2]){10, 20}   // 复合字面量
注意,去掉声明中的数组名,留下的int [2]即是复合字面量的类型名。
初始化有数组名的数组时可以省略数组大小,复合字面量也可以省略大
小,编译器会自动计算数组当前的元素个数:
(int []){50, 20, 90} // 内含3个元素的复合字面量
因为复合字面量是匿名的,所以不能先创建然后再使用它,必须在创建
的同时使用它。使用指针记录地址就是一种用法。也就是说,可以这样用:
int * pt1;
pt1 = (int [2]) {10, 20};
注意,该复合字面量的字面常量与上面创建的 diva 数组的字面常量完
全相同。与有数组名的数组类似,复合字面量的类型名也代表首元素的地
址,所以可以把它赋给指向int的指针。然后便可使用这个指针。例如,本例
中*pt1是10,pt1[1]是20。
还可以把复合字面量作为实际参数传递给带有匹配形式参数的函数:
int sum(const int ar[], int n);
int total3;
total3 = sum((int []){4,4,4,5,5,5}, 6);
这里,第1个实参是内含6个int类型值的数组,和数组名类似,这同时也
是该数组首元素的地址。这种用法的好处是,把信息传入函数前不必先创建
数组,这是复合字面量的典型用法。
可以把这种用法应用于二维数组或多维数组。例如,下面的代码演示了
如何创建二维int数组并储存其地址:
int (*pt2)[4];  // 声明一个指向二维数组的指针,该数组内含2个数组
元素,
// 每个元素是内含4个int类型值的数组
pt2 = (int [2][4]) { {1,2,3,-9}, {4,5,6,-8} };
如上所示,该复合字面量的类型是int [2][4],即一个2×4的int数组。

转载地址:http://qweff.baihongyu.com/

你可能感兴趣的文章
jstl标签详解
查看>>
Eclipse中使用SVN的使用
查看>>
JSON.parse和eval的区别
查看>>
JQuery中$.ajax()方法参数详解
查看>>
正则表达式的数字实例
查看>>
【转】EasyUI 验证
查看>>
启动mysql时,提示“Another MySQL daemon already running with the same unix socket.”解决方法
查看>>
Django实战---商城购物车的增删改、显示和合并购物车
查看>>
Django项目实战----添加支付宝支付
查看>>
DRF框架---前言(简单使用)
查看>>
字符串外面是b“ “的转换 -亲测有效
查看>>
单通道和多通道卷积
查看>>
npy文件和pkl文件的保存和读取
查看>>
买卖股票的最佳时机
查看>>
AUC粗浅理解笔记记录
查看>>
torch 模型运行时间与forward没对应的可能原因
查看>>
JavaScript 的addEventListener() 事件监听详解!
查看>>
上传图片到阿里云OSS和获取上传图片的url的详解 !
查看>>
Kafka为什么这么快?
查看>>
Java 生产者和消费者面试题
查看>>