《C语言深度剖析》第一章 关键字详解 p5 C语言从入门到入土(进阶篇)_#progma warning(disable 4996)

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

法二:#progma warning(disable:4996);

(但是要注意,写的话都要写在头文件那一块,一写在第一行,二可以写在后面一点(这样是肯定是对的,但是对于法一是不是一定要写在第一行作者没有详细去测试,大家有兴趣的可以去试试哈))

这就是结构体指针访问结构体成员变量。

当然上面比较麻烦:

printf(“%s\n”,p->name);

这个更简单,->是有指针才能用哈。

为什么结构体访问有两种方式?

C语言是面向过程的语言,即有大量函数,有函数就要传参,又在我们传参的时候可能会传结构体,但是结构体非常大,我们传值过去临时拷贝就大,效率就低,所以就建议传指针。简单说,结构体在定义的时候,用  .  方便些,在传参的时候 -> 方便些。

又一个问题:空结构体多大?

:看平台。VS中要求最少要有一个成员,即无空结构体(报错)

gcc中为0,且能定义变量,此变量空间大小为0!但是不能使用!

(即能不能开辟为0的空间是编译器决定的)

柔性数组

VS是可以编过的。

linux也可以。

但是我们不建议第一个元素就是arr【0】这样,前面至少要有一个有效元素。最后一个才是柔型数组。当然要是上面写成 arr【】没有0,前面就要有有效元素,不然就报错。

柔性数组怎么用?

这是多申请了10个字节的空间。

谁的地址最低?

说明最上面的地址最低。下面这图也可以更好地说明。

union 关键字(联合体关键字)

联合体也可以用  .   或者  -> 操作符进行成员访问。

那我们先问一下a和b谁是第一个元素?

联合体变量的地址和联合体最大(所占空间最大)变量的地址是一样的。

在这里再补充一个内容其实也是作者之前疑惑了很久的一个问题:

我们都知道开辟函数栈帧是在栈区,而栈区又是高地址低地址使用,而数组的地址又是递增的,那开辟数组的空间,其中数组的内容是如何分布的呢?

所以b也是和a和x的地址都是一样的,即联合体内所有成员的起始地址都一样。

即永远在a的低地址处。(每一个元素都是第一个元素)

也有内存对齐,简单说就是联合体的总大小必须可以除以任何一个数据的类型

然后接着上面讲:

那么这个代码打印的结果是什么?

因为是小端,所以:

解释:

enum 枚举类型

用法:

枚举内容本质上就是常量,且值从上到下为0 1 2 3 4,我们又说道各内容本质上是常量,但是这里 enum color c=RED没有报错,我们也可以这么说,en um color相当于我们的 int(这样便于理解)。

作用:

1.我们现实生活中有很多相关联的常量,如星期几,月的天数,性别等等需要在代码中体现出来。

2.一旦枚举出来常量之后不是用数字代替,而是用各种赋有意义的英文单词去代替,这样写出来的代码有自描述性(增加可读性)。当然如果需要的常量不多且相关性不大,就推荐去使用#define定义。

对于枚举各常量设置值:

各值会往后+1递增。

typedef 关键字

讲明了就是类型的重命名。为了简化名称或者更好理解。但是也不要过度使用,可能反而会降低可读性(一般只推荐结构体重命名)。

下面有4个例子:

例1:

例2:

 例3:

例4 :

所以说上面定义的a为数组类型 int  【10】。

typedef 和 #define 的区别

第一个:

第二个:

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

e,x_16)

[外链图片转存中…(img-UHiF5Ghd-1715846204795)]
[外链图片转存中…(img-hOJh5QXp-1715846204796)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值