C语言结构体定义后添加指针的作用是什么?
结构体里加指针的核心作用:构建链表,灵活存储同类型数据
嘿,刚学结构体就留意到这个细节,太赞了!你学长这段代码里的指针,本质是用来构建单向链表的,这是C语言里非常常用的一种动态数据结构,我给你拆解清楚:
1. 结构体内部的struct lecturer *next;
这个指针是链表的核心——每个lecturer结构体实例(可以理解为一个"讲师节点"),都能通过next指针指向另一个lecturer节点。这样一来,你就能把N个讲师的数据像串珠子一样连起来:第一个节点的next指向第二个,第二个指向第三个……直到最后一个节点的next设为NULL(表示链表结束)。
对比用数组存讲师数据(比如struct lecturer lecturers[100];),链表的优势是不用提前固定容量,想加多少个讲师节点就加多少(只要内存足够),还能方便地插入、删除中间的节点,数组在这方面就很死板。
2. 结构体外面的*start指针
这个指针是用来记录链表的头节点的——也就是整个链表第一个讲师节点的地址。如果没有start,你就找不到整个链表的入口,没法遍历所有节点的数据。比如你想打印所有讲师的名字,就得从start开始,顺着每个节点的next一步步走下去。
3. 结构体外面的*curr指针
这是个常用的"工具指针",一般用来做遍历或者新增节点时的临时游标:
- 遍历链表时:用
curr从start出发,逐个访问每个节点的数据,比如curr = curr->next;就能跳到下一个节点,不用每次都从头节点开始找。 - 新增节点时:用
curr遍历到链表的最后一个节点,然后把新节点的地址赋值给最后一个节点的next,这样新节点就被加到链表末尾了。
举个简单的场景例子:
假设你有3个讲师数据,用链表串联后就是:start → 讲师A → 讲师B → 讲师C → NULL
你想访问讲师B的名字,就可以先让curr = start->next;,然后用curr->Lecturer_Name就能拿到数据。
内容的提问来源于stack exchange,提问作者Khafabi Dza Gustan
相关产品推荐
相关产品推荐

