这段代码实际上如何工作?

时间:2015-03-22 15:26:20

标签: c linked-list

我无法理解用于实现静态链接列表的这3行代码。这实际上就是question的答案。

我在这里再次发布代码 - (主要动作基本上是第二行)

struct node {int x; struct node *next;};
#define cons(x,next) (struct node[]){{x,next}}
struct node *head = cons(1, cons(2, cons(3, cons(4, NULL))));

我的问题是 - 这个陈述的功能是什么? (struct node[]){{x,next}}。这是一个初始化语句,它返回的是什么,它可以分配给struct node*

1 个答案:

答案 0 :(得分:1)

(struct node[]){{x,next}}是复合文字,它会初始化struct *node指针。

+------+------+     +------+------+     +------+------+     +------+------+
|      |      |     |      |      |     |      |      |     |      |      |
|  1   | next +---->|  2   | next +---->|  3   | next +---->|  4   | NULL |
|      |      |     |      |      |     |      |      |     |      |      |
+------+------+     +------+------+     +------+------+     +------+------+
   ^
   |
  head