简单好用的C语言偏门知识,复合文字,编程小知识值得拥有

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

前言

C99新增了复合文字(compound literal)。文字是非符号常量。例如:5是int类型的文字;82.3是float类型的文字等等。C99标准委员会认为:如果又能够表示数组和结构内容的复合文字,那么在编写程序的时候要方便得多。如果你C/C++基础差,不妨关注小编的专栏教程。通俗易懂,随到随学。

数组复合文字的定义方式

对于数组来说,复合文字看起来像是在数组的初始化列表前面加上用圆括号括起来的类型名。

#include <stdio.h>int main(){  int iArray[]={10,20};        //普通数组  int &pArray=(int []){10,20};      //一个复合文字    //int &pArray=(int [2]){10,20}; 与上文等效 return 0;}

解析:

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

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

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

复合文字充当函数参数

复合文字也可以作为实际参数被传递给带有类型与之匹配的形式参量的函数。如下测试案例:

#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;}

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

总结

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

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

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

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

(0)

相关推荐

  • 实验6 结构体

    #include<stdio.h>#include<stdlib.h>#include<string.h> #define N 3 // 运行程序输入测试时,可以把 ...

  • C语言中数组的总结

    #目录 # 一维数组的创建和初始化 一维数组的使用 一维数组在内存中的存储 指针的初步介绍 一维数组的指针访问 二维数组的创建和初始化 二维数组的使用 二维数组在内存中的存储 二维数组的指针访问 有关 ...

  • C语言二维数组的定义、初始化、赋值

    上节讲解的数组可以看作是一行连续的数据,只有一个下标,称为一维数组.在实际问题中有很多数据是二维的或多维的,因此C语言允许构造多维数组.多维数组元素有多个下标,以确定它在数组中的位置.本节只介绍二维数 ...

  • C语言知识总结——宏,枚举,结构体,共用体

    C语言知识总结——宏,枚举,结构体,共用体

  • 实验5

    #include <stdio.h> const int N=3; int main() { int a[N] = {1, 2, 3}; int i; printf("通过数组名 ...

  • 从书法导向上来说,宁愿稳一点、保守一点,也决不能“走偏门”

    KnowArt|杨文彪 "趴书"小楷 胡笳十八拍 其二 局部 日暮风悲兮边声四起,不知愁心兮说向谁是!原野萧条兮烽戍万里,俗贱老弱兮少壮 为美.逐有水草兮安家葺垒,牛羊满野兮聚如蜂 ...

  • 在家网络兼职招聘 日入上万偏门的故事

    在现在的这个时代,处处都需要钱,当然大家也会利用各种方法去赚钱,有的自己创业,有的去上班,还有利用一台车也能赚钱,那只需一辆轿车就可做的生意有哪些?接下来我们就来给大家讲解一下这方面的内容 1.送货赚 ...

  • 国内商业正在经历严重挑战:卖产品的不赚钱,走偏门的人赚钱!

    近段时间,网上出现了一批专门教人做临期食品的人,三折拿货,五折卖出,轻轻松松年入百万. 真的这么赚钱吗?这是我们很多人内心的一个疑问. 从理论上来讲,确实人人有机会通过做临期食品赚到人生中的第一桶金. ...

  • 灰色擦边球赚钱项目,新款偏门暴利赚钱项目

    带着人生的梦想,怀揣着自己的希望,我来到了天津铁道职业技术学院,在这里我将自己的梦想放飞,将自己的未来播种,我在等待着它的开花.结果.上了社会之后,大家会发现赚钱还是比较难的,有很多人创业都是以失败告 ...

  • 现在有什么偏门可以做,想赚钱不可以错过的行业!

    你要从现在开始,微笑着面对生活,不要抱怨生活给了你太多的磨难,不要抱怨生活中有太多的曲折,更不要抱怨生活中存在的不公.现在能赚钱的行业都被大家翻了个遍,所以,有些朋友也变化了思路,想走偏行,那什么才是 ...

  • 正规捞偏门一天能赚上万的黑方法

    谁不曾感觉过失望,谁不曾辜负过自己的青春,我们总是在昨天狠狠绝望过一回,然后突然醒悟般地走向未来的生活.做生意赚钱的方法有很多种,有一些朋友选择踏踏实实的做生意,但是有一些朋友想要冒着风险做一些空手套 ...

  • 2021年捞偏门的赚钱门路有哪些,创业指导方向

    三百六十行,行行出状元,正道出成功的不唯一性.也正是因为如此,人生才这样纷繁复杂,丰富多彩.成功不是绝对的.成功者常陷入"有得有失"的二难境地,陷入成功的相对性之中.事业有成,家门 ...

  • 现实中有哪些捞偏门的方法

    最好不是在夕阳西下的时候幻想什么,而是在旭日初生的时候即投入行动.现在创业的人越来越多,很多有头脑的人想要创业,但是自己没有足够的资金去创业,选对创业方向和创业项目对投资者的发展有很大帮助哦,那么小本 ...

  • 这几个生肖正财运好,千万别捞偏门财!

    有的人不适合捞偏门的财富,只适合得正财.这类人一般是事业好,财运虽然不是很有爆发力,却非常的稳固,把握时机也可荣华富贵.下面这几个生肖天生就是发正财的命,他们万不可捞偏门或是选择赌博致富. 生肖牛 属 ...