c语言文本字体要求,C语言你可能不知道的知识,复合文字

原创 coolmoying 1周前收录于话题#C语言怪异小知识1#C语言编程1#C语言学习1#编程2

8b88e50cfab78c5b9be00f45ae9f4ee9.png

本文主要介绍一些C语言的一些偏门知识给大家,在这里简单的谈一下C语言复合文字。需要读者具备一定的C语言基础。前言

C99新增了复合文字(compound literal)。文字是非符号常量。例如:5是int类型的文字;82.3是float类型的文字等等。C99标准委员会认为:如果又能够表示数组和结构内容的复合文字,那么在编写程序的时候要方便的多。数组复合文字的定义方式

对于数组来说,复合文字看起来像是在数组的初始化列表前面加上用圆括号括起来的类型名。#include int main(){  int iArray[]={10,20};             //普通数组  int &pArray=(int []){10,20};      //一个复合文字    //int &pArray=(int [2]){10,20};   与上文等效  return 0;}

解析:类型名就是前面声明中去掉iArray后剩余部分,即int[2]。

初始化复合文字可省略数组大小,编译器会自动计算元素数目。

复合文字没名称,必须创建时通过特定类型表示他们,便于使用。复合文字充当函数参数

复合文字也可以做为实际参数被传递给带有类型与之匹配的形式参量的函数。如下测试案例:#include void print(int array[], int arrayNum) {  for (int i = 0; i 

测试截图如下:

e5daa6878829e43ed2767c204a3233ff.png

此处第一个参数是包含6个元素的int型数组,同时也是首元素的地址(同数组名一样)。这种给函数传递信息而不必先创建数组的做法,是复合常量的通常使用方法。二维数组或多维数组中复合文字

这种技巧也可以用在处理二维数组或多维数组的函数中。例如,下面的代码介绍如何创建一个二维int数组并保存其地址。#include int main() {  int(*pArray)[4];//声明一个数组指针  pArray = (int[2][4]){ {1,2,3,-9},{4,5,6,-8} };  return 0;}

二维数组或多维数组中复合文字

如下结构体复合文字用法。#include #include struct MM{char firstName[20];char secondName[20];};void  getName(struct MM mm){puts(strcat(mm.firstName, mm.secondName));}int main(){getName((struct MM) { "小", "可爱" });  //调用return 0;}

复合文字也可以取地址

用#include #include struct MM{char firstName[20];char secondName[20];};int main(){struct MM* pMM = &((struct MM) { "小", "可爱" });  //调用printf("%s%s\n", pMM->firstName, pMM->secondName);return 0;}

以上程序运行结果打印:小可爱总结

当一个类似结构的东西需要临时构造的时候,可以用 (type_name){xx,xx,xx},而type_name就是之前定义的格式,去掉变量名(数组名)即可, 这种使用方法有点像 C++ 的构造函数。

复合文字就相当于一个常量,只不过形式较为复杂而已,所有可以用常量的地方均可以用复合文字,例如,宏定义。

使用复合文字,在想传一个“常量”时,就不必先定义,再传值了,比如传一个常数坐标(struct point{double x;double y;}),这样就不用先定义一个结构变量,再传结构体过去了,代码更加简洁。

值得注意的是,复合文字具有左值语义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值