c - 这段代码实际上是如何工作的?

标签 c linked-list

我无法理解这用于实现静态链表的三行代码。这实际上就是这个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*

最佳答案

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

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

关于c - 这段代码实际上是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29196158/

相关文章:

c++ - MinMax堆算法实现

c - C中列表的列表

c - 是否可以将大型数组声明为静态并将其用作 c 中其他文件中的 extern

java - 为什么链表要有父类

c - 套接字:同时监听和发送的能力

c - 调用popen后如何在父进程和子进程之间使用管道?

C++ 无法将参数 1 从 'KeyValue<K,V> *' 转换为 'const T &'

c - (C基础) LinkedList : local elements get deleted after insert method

c - 链表中的键是什么?

c - 添加到链表时卡住(C)