本文主要介绍一些C语言的一些偏门知识给大家,在这里简单谈一下C语言复合文字。需要读者具备一定的C语言基础。
前言
C99新增了复合文字(compound literal)。文字是非符号常量。例如:5是int类型的文字;82.3是float类型的文字等等。C99标准委员会认为:如果又能够表示数组和结构内容的复合文字,那么在编写程序的时候要方便得多。
数组复合文字的定义方式
对于数组来说,复合文字看起来像是在数组的初始化列表前面加上用圆括号括起来的类型名。
- #include <stdio.h>
- int main()
- {
- int iArray[]={10,20}; //普通数组
- int &pArray=(int []){10,20}; //一个复合文字
- //int &pArray=(int [2]){10,20}; 与上文等效
- return 0;
- }
解析:
复合文字充当函数参数
复合文字也可以作为实际参数被传递给带有类型与之匹配的形式参量的函数。如下测试案例:
- #include <stdio.h>
- void print(int array[], int arrayNum)
- {
- for (int i = 0; i < arrayNum; i++)
- {
- printf("%d\t", array[i]);
- }
- }
- int main()
- {
- print((int[]){1,2,3,4,5,6}, 6);
- return 0;
- }
测试截图如下:
此处第一个参数是包含6个元素的int型数组,同时也是首元素的地址(同数组名一样)。这种给函数传递信息而不必先创建数组的做法,是复合常量的通常使用方法。
二维数组或多维数组中复合文字
这种技巧也可以用在处理二维数组或多维数组的函数中。例如,下面的代码介绍如何创建一个二维int数组并保存其地址。
- #include <stdio.h>
- int main()
- {
- int(*pArray)[4];//声明一个数组指针
- pArray = (int[2][4]){ {1,2,3,-9},{4,5,6,-8} };
- return 0;
- }
二维数组或多维数组中复合文字
用如下结构体复合文字用法。
- #include <stdio.h>
- #include <string.h>
- 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 <stdio.h>
- #include <string.h>
- 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;
- }
以上程序运行结果打印:小可爱
总结
好了,复合文字就介绍到这里,大家可以先练习一下。
Cloud-init是开源的云初始化程序,能够对新创建弹性云服务器中指定的自定义信息...
1. 接口描述 接口请求域名: cvm.tencentcloudapi.com 。 本接口 (ResetInstance...
云计算服务正在以前所未有的速度在各行各业快速普及,成为IT应用的最主流实现形...
步入2月,美股新一轮财报季渐入高潮。 本周二,包括阿里巴巴、亚马逊、谷歌在内...
本文转载自公众号读芯术(ID:AI_Discovery) 下面这个模型在一项图像识别竞赛中经...
据IDC评述网(idcps.com)报道,ntldstats.com最新数据显示,截止至2016年3月31...
TOP云 (west.cn)8月14日消息,本期的sedo 域名交易 榜共有63个 域名 超2000美...
【编者的话】本文作者利用自己云原生工程师的优势,分享了他对2021年及之后的云...
操作场景 本节操作介绍在Windows和Linux环境中使用SSH密钥对方式远程登录Linux云...
每年618是年中购物节,每到这一天,大家都会进入网购模式,疯狂的买买买。618购...