C语言第十七次课 (struct 结构体的定义 分配空间 嵌套 不完整类型 指向 引用 )

C语言第十七次课 (结构体)

(1)结构体的定义
在这里插入图片描述

在这里插入图片描述
//注意是设计结构体而不是定义结构体, 因为定义变量要开辟空间, 而设计结构体不会给其开辟空间, 设计结构体时 “ ;” 分号是不可或缺的。

在这里插入图片描述
//结构体不占用存储空间 但由结构体定义的变量占存储空间。好比 int a=10可以而int=10不行,结构体同理。

(2)定义结构体时如何分配空间:
在这里插入图片描述
//对结构体变量的初始化使用花括号[ ],对数组也是[ ],两者的区别是:数组的每一个元素所占字节个数一样,类型也一样; 结构体每一个属性所占的字节个数可能不一样,类型不一样。 两者的相同点:若都分配10个空间,只初始化前面四个元素,后面的元素通通填0。

//结构体的初始化 是从上到下依次给定:
在这里插入图片描述
// const:我能指向你,但我不能改变你。

区分const char*s_id;和const s_id[8];结构的不同:前者为指针 后者为数组。
在这里插入图片描述
//指针前必须加const 因为指针可以调动这些字符串对其进行改变,所以需要用const限制其赋值能力,const char * s_id.
字符串前不用加const ,chars_id[10]即可 ,把字符串拷贝到这个空间 ,数组有空间每个量可以修改,所以数组前不加const。
在这里插入图片描述
(3)结构体的嵌套
在这里插入图片描述
(4)“不完整类型”:无法用sizeof计算大小:
此时x中含有studx结构体;
在这里插入图片描述
//无类型大小也无法计算即:sizeof(void)

如果把上面代码改为指针能否编译通过?
在这里插入图片描述
(5)结构体的指向:
结构体之间可以相互初始化:struct student s3=s1;和struct定义的类型无关。
在这里插入图片描述
结构体对成员的访问 用 “ .”
也可用指针的访问 两种形式“.” 和 “-> ” 中间没有空格 称为“指向符”
printf("%s \n",s1.s_name);
在这里插入图片描述
结构体与结构体指针的比较:
结构体指针效率更高,指针前要加const 只能读取你不能改变你,并且要加断言 判断不为空;
结构体不需要加断言与const;但效率比结构体指针要低。
在这里插入图片描述
(6)引用 :“别名”
引用的特点:1.必须给以初始化。2.与之对应 不存在空引用,引用不存在分级,和一级指针二级指针这种不同。
在这里插入图片描述

在这里插入图片描述
把引用 加入到结构体中 比指针更方便 因为不用判空。
在这里插入图片描述

引用的例题:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值