C99的复合文字(compound literal)

C99的复合文字(compound literal)

 

       在学习C语言的过程中,接触到一个有趣的东西—复合文字(compound literal)。这个东西也是一个很神奇的存在,给我的感觉和现在C++中的lambda表达式有着某种程度的相似性,怎么说呢?就是这种东西改变了以往我们对数组的使用。

       具体来说,以往我们如果要调用一个函数来处理一个数组的时候我们会怎么做呢?传递指针相信是大多数人的第一反应。传递指针的前提是这数组在我们调用该函数之前就已经创建、存在。相信应该有人已经猜到了,它有趣的是可以在函数调用时创建数组,并对其赋值初始化。原书中的描述是:能够表示数组和结构内容的复合文字(compound literal){依据这段描述,这种复合文字应该也能用于结构体?}。

它的语法规则是:

int *p;

p = ( int [] ) { 100, 200 };

在这里( int [] ) { 100, 200 };创建了一个无名的数组,而且它被用在函数调用中的样子是:

int sum(int arr[],int n);  //函数声明

sum((int [] ) {1,2,3,4}, 4);// 函数调用

这种东西能够让我们在向函数传递数组时,不必预先创建,可以随用随创建。这和C++中的lambda表达式何其的类似,它们这种概念被构建出来的目的是相似的,我需要的时候随时都能创建出我要的东西,而不必预先创建出来然后等候着我去使用。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值