概述
有相当一部分同学在学习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,何乐而不为呢!
只是对于初学者而言,可能很难理解为结构体指针类型起别名的方式。这里只需把它当作一种等价替换就可以,为结构体指针起别名之后会把指针标志*给藏起来,但是在实际使用中要时刻注意,这仍旧是一个指针。
感谢阅读,学习使人强大。
举报/反馈
最后
以上就是开放大神为你收集整理的c语言链表指向下一个结构体指针,「C语言指针」链表学习前导知识——结构体和它的众多小细节...的全部内容,希望文章能够帮你解决c语言链表指向下一个结构体指针,「C语言指针」链表学习前导知识——结构体和它的众多小细节...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复