链表节点结构的第一个成员变量总是下一个节点

linked list first member variable of node structure always next node

本文关键字:节点 下一个 变量 第一个 结构 链表 成员      更新时间:2023-10-16

假设您有一个如下定义的节点链接列表:

C++代码

struct node {
    node *next;
    int i ;
};

将下一个指针作为结构的第一个成员变量有什么好处吗?

我认为人们通过上述方法尝试这一点(我可能错了(

node n, m;
*n=&m;

如果上面是正确的,那么像上面这样编码是正确的吗。正确的方法是什么?

将下一个指针作为第一个成员有什么好处吗结构变量?

在从零偏移成员加载和向零偏移成员写入时,可以减少汇编指令的大小,但仅在没有虚拟表的类中(vtbl是省略的第一个成员(,从而可以获得非常小的性能优势。

如果您想要预构建一个范围/全局分配列表,则可以如上所述对其元素进行初始化。

你可以试试:

struct node {
    struct node* next;
    int i;
};
node z = {0}, c={&z}, b={&c}, a={&b};
node * stack = &a;

你可以在搜索"linux内核链接列表"时找到关于喜欢列表的非常有用的信息:

  • Linux内核链表说明
  • 内核是如何实现链表的

我现在正在使用c++模板设计"侵入式节点"通用容器,也许这个问题看起来很有趣。

node n, m;
*n = &m;

不是法定代码,也许你指的是

node n, m;
n.next = &m;

但通常情况下,这将通过动态分配来完成

node* n = new node;
n->next = new node;

因为通常您会使用CCD_ 1来创建可变长度列表。由于列表的长度各不相同,因此无法声明正确数量的变量,而是必须动态分配节点。