假设需要向一个带有int型参量的函数传递一个值,这时可以传递一个int型常量,也可以传递一个int型的变量。在C99标准之前,数组参数情况于现在不一样,没有所谓的数组常量可供传递,而在C99中增加了复合文字。文字是非符号的常量,如5是int型的文字25.3是double型的文字。由此可见如果有能够表示数组和结构内容的文字,那么编程将会更加方便。

对于数组来说,复合文字看起来就像是在数组初始化列表加上圆括号括起来的类型名,例如:下面是普通数组的声明方法:

int a[2]={10,20};

下面是一个复合文字,它创建了一个包含两个int型的无名称数组:

(int [2]){10,20};

注意、类型名就是前面声明中去掉a的剩余部分,即int [2]

正如初始化一个数组时可以不指定数组的大小一样,初始化一个复合文字也可以省略大小:

(int []){10,20,30}; //有三个元素的复合文字

由于这些符合文字没有名字,不能在一个语句中创建他们,需要在其他语句中使用。使用的一种方法是使用指针:

int *p;

p=(int []){10,20,30};

注意这个文字常量被表示为一个int型数组。与数组名相同,这个常量表示这个数组的首地址,如在本例中:

*p==10

另外复合文字可以作为参数传递给一个函数:

int sum(int ar[],int n)

...............

int tot;

tot=sum((int []){1,,2,3,4},4);

这种给函数传递数组信息而不用先创建数组的方式,符合常量通常的使用方法。

这种方法也可以使用在多维数组的使用上面,如创建一个二维数组并保存其地址:

int (*p)[4];

p=(int [2][4]){{1,2,3,4},{5,6,7,8}};

其中复合文字类型是int [2][4],即一个2*4的int数组。

综合使用代码:

#include <stdio.h>
#define COLS 4 void sum2d (int a[][COLS],int row);
void sum (int a[],int n); int main (void)
{
int *p1;
int (*p2)[COLS]; p1=(int [2]){10,20};
p2=(int [2][COLS]){{1,2,3,4},{5,6,7,8}};
sum (p1,2);
sum2d (p2,2);
}
void sum (int a[],int n)
{
int tot=0; for (int i=0;i<n;i++)
{
tot+=a[i];
}
printf ("The sum of all is %d\n",tot);
}
void sum2d (int a[][COLS],int row)
{
int tot=0; for (int i=0;i<row;i++)
{
for (int j=0;j<COLS;j++)
{
tot+=a[i][j];
}
}
printf ("The sum of all is %d\n",tot);
}

C语言的复合文字的更多相关文章

  1. c语言:复合文字

    复合文字的意义,相当于是在C语言中,为数组类型定义了一种类似于8之于int,'w'之于char一样的常量类型,所以从C99之后,可以在一些地方使用复合文字来代替数组使用. 复合文字的声明 (]){,, ...

  2. [日常] Go语言圣经--复合数据类型,数组习题

    go语言圣经-复合数据类型 1.以不同的方式组合基本类型可以构造出来的复合数据类型 2.四种类型——数组.slice.map和结构体 3.数组是由同构的元素组成——每个数组元素都是完全相同的类型——结 ...

  3. C复合文字

    C99之前,可以传递数组,但是没有所谓的数组常量可供传递,于是新增了复合文字. 普通数组声明方法: int d[2]={10,20}; 复合文字声明: 与数组名相同,常量同时代表元素的地址. (int ...

  4. C99新增内容之复合文字(compound literal)

    前言: 最近在复习C,发现了一些新东西,例如:变长数组,复合文字,指针的兼容性等.今天先简单谈一下复合文字. 正文: 假如需要向带有一个int参量的函数传递一个值,您可以传递一个int变量,也可以传递 ...

  5. 复合文字(Compound Literals)

    复合文字(Compound Literals) 阅读代码时发现了这行 1 setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&(int){1},sizeof(in ...

  6. [Objective-C语言教程]复合对象(33)

    在Objective-C中,可以在类集群中创建子类,该类集合定义了一个嵌入在其中的类. 这些类对象是复合对象.你可能想知道什么是类集群,下面首先了解什么是类集群. 1. 类集群 类集群是基础框架广泛使 ...

  7. C语言复合字面量的使用

    C99添加的特性,复合字面量(composite literal).一旦熟悉并使用,便会体会到简洁强大的表达. 所谓字面量就是固定数值的表示.数值和字符串类型都有字面量的表达.如: // 100, 1 ...

  8. 标准C 语言总结

    ***************C语言****************** --day01-- Linux是一个和Windows类似的操作系统 通常通过终端软件使用Linux操作系统 终端软件里只能使用 ...

  9. C语言学习书籍推荐《C Primer Plus(中文版)(第5版)》下载

    普拉塔 (Prata S.) (作者), 云巅工作室 (译者) <C Primer Plus(中文版)(第5版)>共17章,介绍了C语言的基础知识,包括数据类型.格式化输入输出.运算符.表 ...

随机推荐

  1. Delphi 服务操作

    unit Service; interface uses Windows,Messages,SysUtils,Winsvc,Dialogs; function  StartServices(Const ...

  2. 使用JS控制struts的日期控件datetimepicker

    功能需求:页面主要有两个日历框,一个是当前日期,一个是去年同期,要求当用户改变当前日期时,同步修改去年同期为当前日期-1年. 当时刚接触到需求的第一时间想到的就是为< sx:datetimepi ...

  3. Python学习笔记6-Python中re(正则表达式)模块学习

    今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. re.match re.match 尝试从 ...

  4. SpringMVC、SpringMVC XML配置(纯XML方式)

    1.引入SrpingMVC所使用的Java包: cglib-nodep-2.1_3.jar.commons-logging.jar.spring-aspects-4.1.7.RELEASE.jar.s ...

  5. 关于cocos2dx 3.0升级崩溃报错(unable to load native library) 和(Fatal signal 11 (SIGSEGV) at 0x00000000)

    近期一直在Windows平台开发cocos-2dx游戏,期间做了一次引擎升级,升级到了3.0正式版本号.Windows平台上表现非常正常,没有出现什么问题. 上周五准备公布一个安卓包,编译非常轻松的就 ...

  6. 如风一样,飞翔------Day37

    我一直都觉得自己是个反应没有那么敏锐的人,而不幸的是其实也是,所以,在菜鸟的头衔上,我不得不再背负上一个笨鸟的"光芒".我不苛求一飞冲天的传奇,却也有着不甘寂寞的激昂,我选择先飞, ...

  7. Repeater的ItemCommand事件和ItemCreated事件,高手请跳过~

    捣鼓这几天,我终于比之前更能区别Repeater的ItemCommand事件和ItemCreated事件了 当Repeater的dataSource是sqldataSource的话,要想触发ItemC ...

  8. 前端新人学习笔记-------html/css/js基础知识点(三)

    这断时间家里有点事,上班也有点任务,所以几天没看视频没来更新了.今天来更新一下了. 一:默认样式重置 但凡是浏览默认的样式,都不要使用. body,p,h1,h2,h3,h4,h5,h6,dl,dd{ ...

  9. 关于js中的类型内容总结(类型识别)

    JS 有7种数据类型: 6种原始类型:Boollean    String   Number    Null    Underfined   Symbol 引用类型:Object 类型识别主要有以下四 ...

  10. js——DOM操作(二)

    表格属性: tHead:表格头 tBodies:表格正文 tFoot:表格尾 rows:行 cells:列 表单操作: <form id="form1"> <in ...