1. 主页
  2. 文档
  3. C语言教程
  4. C语言枚举、结构和联合
  5. C中的复合文字

C中的复合文字

考虑下面的 C 程序。

// Please make sure that you compile this program
// using a C compiler, not a C++ compiler (Save your
// file .cpp). If using online compiler, select "C"
#include <stdio.h>
int main()
{
// Compound literal (an array is created without
// any name and address of first element is assigned
// to p. This is equivalent to:
// int arr[] = {2, 4, 6};
// int *p = arr;
int *p = (int []){2, 4, 6};

printf("%d %d %d", p[0], p[1], p[2]);

return 0;
}

输出:

2 4 6

上面的示例是复合文字(Compound literals)的示例。复合文字是在C 的 C99 标准中引入的。复合文字功能允许我们使用给定的初始化值列表创建未命名的对象。在上面的示例中,创建了一个没有任何名称的数组。数组的第一个元素的地址分配给指针 p。

它有什么用?
复合文字主要与结构一起使用,并且在将结构变量传递给函数时特别有用。我们可以传递一个结构对象而不定义它
例如,考虑下面的代码。

// Please make sure that you compile this program
// using a C compiler, not a C++ compiler (Save your
// file .cpp). If using online compiler, select "C"
#include <stdio.h>

// Structure to represent a 2D point
struct Point
{
int x, y;
};

// Utility function to print point
void printPoint(struct Point p)
{
printf("%d, %d", p.x, p.y);
}

int main()
{
// Calling printPoint() without creating any temporary
// Point variable in main()
printPoint((struct Point){2, 3});

/* Without compound literal, above statement would have
been written as
struct Point temp = {2, 3};
printPoint(temp); */

return 0;
}

输出:

2、3
这篇文章对您有用吗?