#include main() { struct node{int n;struct node *nest;} *p;

学习 时间:2026-04-03 11:15:43 阅读:3387
#include main() { struct node{int n;struct node *nest;} *p;#includemain(){struct node{int n;struct node *nest;} *p;struct node x[3]={{2,x+1},{4,x+2},{6,NULL}};p=x;printf("%d\n",p->n);printf("%d\n",p->next->n);}

最佳回答

忐忑的钢铁侠

个性的白羊

2026-04-03 11:15:43

这里是用初始化的方式定义了一个结构体链表,先说我们正常的定义链表的方式:struct node x,*new;x。n = 2;new = (struct node *)malloc(sizeof(struct node));x->next = new;new。n = 4; 最后一个节点就不写了,做法就是申请一个节点空间,链接到第一个节点上,再进行赋值。 这里的做法也很简单,但是节点很多的情况就不适合了,对结构体元素n的赋值想必你能理解,就是赋值为2、4、6,对struct node *next赋值时用的x的地址进行偏移,它能这样做的基础就是这三个节点本身也是在同一个数组中的,所以地址可以通过x+1、x+2获取。结点1的地址:x,结点2的地址:x+1,结点3的地址:x+2,所以它要链起来直接给结点1的next赋值为x+1,给结点2的next赋值为x+2。最终就生成一个3结点链表。

最新回答共有2条回答

  • 危机的期待
    回复
    2026-04-03 11:15:43

    这里是用初始化的方式定义了一个结构体链表,先说我们正常的定义链表的方式:struct node x,*new;x。n = 2;new = (struct node *)malloc(sizeof(struct node));x->next = new;new。n = 4; 最后一个节点就不写了,做法就是申请一个节点空间,链接到第一个节点上,再进行赋值。 这里的做法也很简单,但是节点很多的情况就不适合了,对结构体元素n的赋值想必你能理解,就是赋值为2、4、6,对struct node *next赋值时用的x的地址进行偏移,它能这样做的基础就是这三个节点本身也是在同一个数组中的,所以地址可以通过x+1、x+2获取。结点1的地址:x,结点2的地址:x+1,结点3的地址:x+2,所以它要链起来直接给结点1的next赋值为x+1,给结点2的next赋值为x+2。最终就生成一个3结点链表。

上一篇 how about going with me=( )( )go with me

下一篇 关于生命的诗歌