结构体的由浅到深

1.用户先定义结构体的类型,要用到struct关键字,如下图:

这里的stu表示student的简写,创建这个结构体的目的是打印学生的信息,然后我们在结构体中(花括号里)写出结构体中的成员(它们可以是不同类型的变量,可以为标量,数组,指针,其他结构体,而数组内只能是相同类型的集合,这点和结构体是不一样的),如下图:

这里圈出来的三个圈,student和a都是用户定义的结构体变量,但student是全局变量(全局变量未定义默认为0),a是局部变量。而86.6后面加f是为了避免编译器识别时把单精度浮点数识别成双精度浮点数,我们在这里看看他的实现结果吧:

2.结构体的成员里有结构体时,无非就是再创建一个新的结构体,并把新的结构体类型和变量写入这个结构体中(类似多级指针层层叠进,之前发的博客有写到,可以去看看),如下图:

 显然其结果为:

 3.关于结构体的成员如何调用:

A:结构体类型变量访问结构体中成员时,使用.操作符

B:指向结构体类型变量的指针访问结构体中成员时,使用->操作符

C:指向结构体类型变量的指针也可以通过.方式访问成员,只不过要先通过*对该指针解引用

 如下图:

显然B是错的,结构体类型变量需要访问其成员时,用.运算符,如果是指向结构体变量的指针访问时,需要用->,或者先对指针解引用,用*操作符,取到指向的结构体类型的变量,再通过.访问,但是要注意优先级 ,因为*优先级没.运算符高,所以先用括号运算符把*括起来,是其先进行解引用,再访问。

4.最后一个重要的小点,最好调用结构体变量时传地址(->,(*p))如果调用结构体变量的话,因为其结构体空间本身非常大,但里面的结构体成员所占内存并不大,且栈区是先进后出,所以会导致压栈严重,性能下降严重,所以最好用指针,因为指针在32位环境下只占4个字节(64位环境下8个) 

 其结果如下:

所以朋友们,尝试结构时,尽量不要直接调用结构体,多用用指针哦。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值