服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - 简单好用的C语言偏门知识,复合文字,编程小知识值得拥有

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

2021-03-10 01:04C语言基础 C/C++

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

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

本文主要介绍一些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; 

解析:

  • 类型名就是前面声明中去掉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; 

测试截图如下:

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

此处第一个参数是包含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. 值得注意的是,复合文字具有左值语义。

好了,复合文字就介绍到这里,大家可以先练习一下。

原文地址:https://www.toutiao.com/i6935480176411197955/

延伸 · 阅读

精彩推荐
  • C/C++深入C++拷贝构造函数的总结详解

    深入C++拷贝构造函数的总结详解

    本篇文章是对C++中拷贝构造函数进行了总结与介绍。需要的朋友参考下...

    C++教程网5182020-11-30
  • C/C++OpenCV实现拼接图像的简单方法

    OpenCV实现拼接图像的简单方法

    这篇文章主要为大家详细介绍了OpenCV实现拼接图像的简单方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    iteye_183805102021-07-29
  • C/C++C语言main函数的三种形式实例详解

    C语言main函数的三种形式实例详解

    这篇文章主要介绍了 C语言main函数的三种形式实例详解的相关资料,需要的朋友可以参考下...

    ieearth6912021-05-16
  • C/C++C语言实现双人五子棋游戏

    C语言实现双人五子棋游戏

    这篇文章主要为大家详细介绍了C语言实现双人五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    两片空白7312021-11-12
  • C/C++关于C语言中E-R图的详解

    关于C语言中E-R图的详解

    今天小编就为大家分享一篇关于关于C语言中E-R图的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看...

    Struggler095962021-07-12
  • C/C++c/c++内存分配大小实例讲解

    c/c++内存分配大小实例讲解

    在本篇文章里小编给大家整理了一篇关于c/c++内存分配大小实例讲解内容,有需要的朋友们可以跟着学习参考下。...

    jihite5172022-02-22
  • C/C++使用C++制作简单的web服务器(续)

    使用C++制作简单的web服务器(续)

    本文承接上文《使用C++制作简单的web服务器》,把web服务器做的功能稍微强大些,主要增加的功能是从文件中读取网页并返回给客户端,而不是把网页代码...

    C++教程网5492021-02-22
  • C/C++c/c++实现获取域名的IP地址

    c/c++实现获取域名的IP地址

    本文给大家汇总介绍了使用c/c++实现获取域名的IP地址的几种方法以及这些方法的核心函数gethostbyname的详细用法,非常的实用,有需要的小伙伴可以参考下...

    C++教程网10262021-03-16