鱼C论坛

 找回密码
 立即注册
查看: 812|回复: 1

[已解决]c语言结构体指针及单链表问题

[复制链接]
发表于 2020-11-18 14:57:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
C语言结构体中成员若是一个指针时的疑惑??
如下两个情况:
情况一:最简单的使用
struct stus
{
int nums;
int ages;
};
struct stur
{
int numr;
int ager;
struct stus temp;
}boy1;
这里可以像这样应用
boy1.numr = 2;
boy1.ager= 22;
boy1.temp.nums=3;
boy1.temp.ages=23;
以上情况一是最通常的使用方法,但我的疑问是下面的情况二

情况二:但如果是这样,是否是循环的调用,如下:
struct stu
{
int num;
int age;
struct stu *next;
}boy2;
应用时是不是这样了?
boy2.num = 2; // 使用正确
boy2.age= 25; // 使用正确
boy2.next.num = 3; // 疑问1:这样使用正确吗?
boy2.next.age = 23; // 疑问1:这样使用正确吗??
boy2.next.next= 某个地址; // 疑问1:那这样使用也是正确的吗???

更大的疑问是(疑问2:),此时因为next是struct stu本身的一个成员,对于结构变量boy2来说,它首先调用它的成员即boy2.next,但同时next是用struct stu定义的一个指针(这个指针它又包含了struct stu的三个成员),所以,boy2.next这时不是又可以重新调用它的三个成员,即boy2.next.num、boy2.next.age、boy2.next.next,如果是这样那不就是说,boy2启不是有无穷个.next了??是吗???如下:
boy2.next.next.next.next.next.............num = 100; // 这里的省略号............表示无穷个.next
boy2.next.next.next.next.next.............age = 101;
boy2.next.next.next.next.next.............next = 某个地址;

不知道我的理解是否正解??请高手们指点指点。
最佳答案
2020-11-18 15:15:29
本帖最后由 sunrise085 于 2020-11-19 09:47 编辑

有这种疑问,有这种思考,很不错!说明你认真学习了。
你的理解有正确的部分,也有不太正确的部分

next是一个struct stu类型的指针,指向struct stu类型变量的地址。是可以用next来调用struct stu的对象的。但是前提是你需要先有这个对象。
再者,指针调用成员对象不是用"."用的是"->",boy2.next->num

打个比方,这种结构体,其实就像是火车车厢,每节车厢后面有个挂钩(就是这个next),前面的其他成员(age、num)就是车厢内的东西,你需要先在这个挂钩上挂上下一个车厢(next指针初始化,即指向一个该结构体的对象),才能看下一个车厢的内容(next->age、next->num),若是后面没有其他车厢,你是看不到任何东西的。只要你的火车连接的足够长(每个结构体对象的next都进行了初始化),你就可以从某一车厢一直向后面的车厢走(next->next->……->next……)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-18 15:15:29 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-11-19 09:47 编辑

有这种疑问,有这种思考,很不错!说明你认真学习了。
你的理解有正确的部分,也有不太正确的部分

next是一个struct stu类型的指针,指向struct stu类型变量的地址。是可以用next来调用struct stu的对象的。但是前提是你需要先有这个对象。
再者,指针调用成员对象不是用"."用的是"->",boy2.next->num

打个比方,这种结构体,其实就像是火车车厢,每节车厢后面有个挂钩(就是这个next),前面的其他成员(age、num)就是车厢内的东西,你需要先在这个挂钩上挂上下一个车厢(next指针初始化,即指向一个该结构体的对象),才能看下一个车厢的内容(next->age、next->num),若是后面没有其他车厢,你是看不到任何东西的。只要你的火车连接的足够长(每个结构体对象的next都进行了初始化),你就可以从某一车厢一直向后面的车厢走(next->next->……->next……)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 11:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表