struct lnode是什么结构类型_c语言入门 第二十一章 结构体与指针

1 结构体和指针

结构体也是保存在我们的内存当中,所以我们也可以定义一个结构体类型的指针指向这个结构体

#include

ea2d1580f128acac349cb57a90525286.png

定义了一个结构体指针,指向了结构体数据

这里需要注意两点

  • 结构体是我们新定义的数据类型和int,char,float这些关键字一样只是表示类型,不会占用内存空间,而结构体变量或者结构体数据才是实实在在创建出来的数据,有内存空间,我们可以创建指针指向结构体数据,但是不能指向结构体本身,我们说的结构体指针指的是指向结构体类型数据的指针而不是指向结构体的指针
  • 结构体变量名和数组名不同,数组名本身就代表了数组的地址,而结构体变量名不是,所以指针指向结构体地址需要使用取地址符

得到了结构体指针之后,我们可以使用箭头运算符 -> 从指针指向的结构体当中获取结构体的成员

#include

bab7a58249e59238af38c9cd50890480.png

改变指针指向的结构体数据,就能得到不同的内容

#include

cec8f3b641ca6921450dbf0ebb324bc2.png

结构体指针也可以作为函数的参数来使用

这里需要注意的是

  • 使用结构体变量获取成员使用 . 运算符
  • 使用结构体指针获取成员使用 -> 运算符

如果我们不使用结构体变量声明,而通过malloc函数来创建结构体的话,得到的就是指向开辟空间的地址的结构体

#include

malloc创建了一个struct student类型大小的空间,得到一个void类型的指针,我们把这个指针转换为struct student类型,然后这个指针就可以使用结构体的成员了

a90a76d7779f93572a62b51a8091b1e3.png

2 结构体指针和函数

结构体指针也可以作为函数的参数和返回值如果我们需要利用函数去修改结构体的内容就可以把结构体的地址当作函数的参数,如果需要得到一个结构体的地址,就可以把结构体作为函数的返回值,一般情况下,把结构体指针作为函数的参数和返回值要比结构体变量更常见

#include

769e61f669c2017f4a6de56dd81942b6.png

3 结构体指针作为结构体的成员

我们可以把结构体作为另一个结构体的成员

比如说,我们可以定义一个结构体用来表示时间,这个结构体包含了年,月,日三个成员

在学生信息当中,可以用这个结构体来代替学生的生日

#include

这里通过stu1.birthday得到结构体内部的结构体,再通过stu1.birthday.year,得到结构体成员的成员

10896f4b7ac946423455514ad986324a.png

baceb48ce261ebb8b724fe8ef957cc0c.png

这里我们发现stu1和stu2居然是同一天出生的,但是我们在保存数据的时候,把2002,2,13这个日期分别在stu1和stu2两个个结构体数据当中保存,同一条数据保存了两次,如果使用指针来处理只保存一次就可以了

#include

这里把struct student 的birthday成员类型改为struct date *,用来保存一个指针,使用stu1.birthday得到这个指针,stu1.birthday->year得到这个指针指向的结构体的数据

2cee0a9e8470211f686bfcdab9eae398.png

这样只需要保存一份birth数据就可以了

b621c9a7e917222d71bc10dc89803040.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值