前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >c语言链表指向下一个结构体指针,结构体和它的众多小细节

c语言链表指向下一个结构体指针,结构体和它的众多小细节

原创
作者头像
好派笔记
修改2021-09-17 18:09:50
修改2021-09-17 18:09:50
1.2K0
举报
文章被收录于专栏:好派笔记好派笔记

有相当一部分同学在学习C语言过程中,学到链表的时候总是绕不过圈圈,迟迟不得要领。

本文尝试着从小白视角对链表的建表算法进行从无到有的解读。

在正式研究链表之前,我们先来学习结构体。跟指针一样,结构体也是一种数据类型,只不过这种数据类型可以存储多种属性的复杂数据,在使用前需要定义类型。

它的定义形式很简单:struct 名字{成员表列;};比如对于一个学生,他可以由姓名、性别、学号、成绩等等组成,而这些数据可以分别采用字符串、字符、整型数组、float类型的数据存储。

所以我么就可以定义一个学生的结构体,里面包含了他的各种属性,只是需要注意我们只是定义了一种数据类型,如果要向内存申请存储单元还要继续声明变量。

接着我们来聊一聊它的使用,变量能够使用,前提是你可以将它表示出来。对于简单的数据类型(比如int),我们可以采用剥洋葱的方式用结构体名加'.'的方式把它“点”出来。

在这里还有一个小细节,就是对于字符串的处理。字符串不能被赋值,只能采用字符数组或者字符拷贝函数strcpy()等方式处理。字符串的名字表示首地址,是地址常量,常量不能被赋值。

定义结构体类型之后系统不会分配单元,只有定义变量系统才会分配单元。当然你也可以定义结构体数组,括号中的数字表示长度,每个单元所占大小就是结构体类型规定的长度。

我们在之前提到,想对某一段一段内存进行操作的前提是【把该变量表示出来】。

对于结构体指针,可以望名知意:这是一个指针,只不过这个指针里面存放的地址是一个结构体变量的地址。

对结构体指针而言,访问它所指向的结构变量的成员可以采用取值运算符*,比如struct (*stu).name。当然,我们在实践中更喜欢采用的方式是箭头方式:struct stu->name。

我们来看一点有意思的内容:++p->age、(++p)->age、(p++)->age、p++->age。其实C语言中类似的表达式比比皆是,在看到的时候只要保持头脑清醒,时刻关注运算优先级和自增的处理就可以很轻松的解决了,读者可以自行推演。

在C语言中,想使用结构体变量必须在前面标注struct,以表示这是一个结构体变量(虽然在.cpp文件支持省略的写法),这种写法往往显得代码冗长,所以程序员往往青睐使用起别名关键字typedef。

你可以在结构体最前面使用关键字struct,这样就可以为结构体类型或者对应的指针类型起别名,在使用过程中也会少写一个struct,何乐而不为呢!

只是对于初学者而言,可能很难理解为结构体指针类型起别名的方式。这里只需把它当作一种等价替换就可以,为结构体指针起别名之后会把指针标志*给藏起来,但是在实际使用中要时刻注意,这仍旧是一个指针。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档