c语言复习----------结构体

前言

结构体的知识也是分为初阶和进阶两部分来进行介绍,进阶还待完善

一、结构体初阶

1. 结构体的声明

1.1 结构的基础知识

结构是一些值的集合,这些值成为成员变量.结构的每个成员可以是不同类型的变量

1.2 结构体的声明

在这里插入图片描述struct 为关键字
Peo 为结构体标签
大括号里面的内容为成员变量(一个汉字占两个字符的空间)
p1, p2为使用struct Peo结构变量创建的两个变量
此处加上p1,p2就是声明和定义同时进行了

1.3 结构体变量的定义和初始化

struct Peo p1;//这里可以在定义时直接初始化也可暂不初始化
//初始化
struct Peo p2 = {"wsq", "11111111111", "男", 175};

注意结构体变量在定义时才会向内存申请空间
结构体的声明只是写出了一个类型,而定义才产生了变量
和c++和java中的类(类型)和对象(变量)相似

1.4 结构成员的类型

结构的成员可以是标量,数组,指针,甚至可以是其他结构体
在这里插入图片描述当如此结构体成员中包含结构体成员时,结构体变量的初始化:

struct St s = {{"zrp", "22222222222", "女", 165}, 521, 13.14f};
//打印结构体成员信息:
printf("%s %s %s %d", p2.name, p2.tele, p2.sex, p2.high);
printf("%s %s %s %d %d %f", s.p.name, s.p.tele, s.p.sex, s.p.high, s.num, s.f);

这里再提一句浮点数的存储并不是百分百正确的,关于浮点数的存储会在以后的文章中写到,此处先不提

2. 结构体成员的访问

上面已经给出了点操作符的访问方式(p2.name),点操作符接收两个操作数
当以结构体指针访问结构体成员时需要用到->操作符,如下图:

print1(p1);
print2(&p1);

在这里插入图片描述

3. 结构体传参

由上面print1和print2函数可以知道,结构体传参可以传结构体变量,也可以传结构体指针,虽然都可以达到打印结构体成员变量的目的,但是在传参时还是有些区别的
p1为形参,p和sp为实参,我们知道在传参时,形参为实参的一份临时拷贝,因此必然也会为形参开辟一片空间,当结构体p中的变量非常多时,p1占用空间就会非常大,从而使得p占用的空间也非常大,造成的空间浪费非常多,同时传递数据多也会需要一定的时间,时间和空间上的双重浪费,就会使得程序效率变低,但是如果实参为&p,地址所占用的空间仅仅为4或者8个字节.大大降低了形参所需的空间和数据传递的时间.
总结一下就是函数传参的时候,参数是需要压栈的,如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,导致性能的降低,因此在结构体传参时,首选传结构体地址

二、结构体进阶

总结

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

With Order @!147

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值