假设需要向一个带有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. Mono For Android中简单实现按钮的动画效果

    Android中动画的分Tween Animation和Frame Animation,本节主要讲Tween Animation的实现. 一般是通过XML文件来定义动画的,具体如下: 1.在项目res ...

  2. 使用JLink间接烧写S3C2410、S3C2440开发板Nor、Nand Flash的方法

    1. 简要说明 JLink的调试功能.烧写Flash的功能都很强大,但是对于S3C2410.S3C2440的Flash操作有些麻烦:烧写Nor Flash时需要设置SDRAM,否则速率很慢:烧写Nan ...

  3. relatedTarget, fromElement, toElement

    原文:http://www.quirksmode.org/js/events_mouse.html#relatedtarget W3C在mouseover和mouseout事件中添加了relatedT ...

  4. 【JSP引入报错】--package javax.servlet.jsp does not exist

    在eclipse maven中没报错的JSP在引入到netbeans的时候,JSP就报错了. 错误提示:package javax.servlet.jsp does not exist 百度找了下,有 ...

  5. Train Problem II(卡特兰数+大数乘除)

    Train Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. hdu 1520Anniversary party(简单树形dp)

    Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  7. [android开发IDE]adt-bundle-windows-x86的一个bug:无法解析.rs文件--------rs_core.rsh file not found

    google的android自带的apps写的是相当牛逼的,将其导入到eclipse中方便我们学习扩展.可惜关于导入的资料太少了,尤其是4.1之后的gallery和camera合二为一了.之前导4.0 ...

  8. sqlserver 死锁查看辅助存储过程

    USE [master] GO /****** Object: StoredProcedure [dbo].[sp_who_lock] Script Date: 03/23/2016 14:17:49 ...

  9. Quartz 2D - 图形上下文(Graphics Contexts)

    一个Graphics Context表示一个绘制目标.它包含绘制系统用于完成绘制指令的绘制参数和设备相关信息.Graphics Context定义了基本的绘制属性,如颜色.裁减区域.线条宽度和样式信息 ...

  10. 第一次线上OJ水友赛

    偶然的机会遇到了这个神奇的网站http://www.luogu.org/   巧遇今天又有小比赛果断去试试,为我的蓝桥北京之旅练练手. 苦苦的在机房刷了一下午,大概做到了6点半. 最激动的是等成绩了, ...