本文共 620 字,大约阅读时间需要 2 分钟。
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表达式何其的类似,它们这种概念被构建出来的目的是相似的,我需要的时候随时都能创建出我要的东西,而不必预先创建出来然后等候着我去使用。
转载地址:http://immsi.baihongyu.com/