0
点赞
收藏
分享

微信扫一扫

C语言深度解剖——C语言关键字

你的益达233 2022-07-12 阅读 235
c语言

每天进步一点点,坚持带来大改变!!!

前言:

1.C语言关键字概览:

1. auto:

是用来修饰局部变量的

2.register:

计算机在进行数据的计算时是通过CPU来计算的,当计算的时候CPU就会访问数据。

数据的存储位置:

3.extern和static 

1.认识多文件

test.h

test.c,main.c

2.多文件之间全局变量和函数的使用 

1.跨文件函数的使用:

总结:跨文件函数使用的时候可以不用声明就可以直接使用(存在警告!)。

原因:函数具有外部链接属性

2.跨文件全局变量的使用:

总结:跨文件全局变量不能直接使用,需要进行声明:

声明关键字:extern

总结:所有变量声明的时候,不能设置初始值!!!

3.潜在问题 :

当一个变量和函数需要在多个文件中使用的时候,如果逐一包含,会使得后期维护成本越来越高!

解决办法:使用.h文件,目的是为了组织项目结构的时候,减少大型项目的维护成本问题!

 4.问题优化:

在头文件进行函数的声明和全局变量声明

注意:

变量声明必须带上extern。

函数声明建议带上extern。

 3.static

通过上面的总结明确了函数和全局变量可以跨文件使用。

那有什么方法让函数和全局变量不能跨文件使用?

接下来就开始对satic这个关键字的功能逐一剖析:

1.static修饰全局变量

总结:static修饰全局变量的时候,全局变量只能在本文件中使用而不能跨文件使用。

原因:改变了全局变量的作用域

2.static修饰函数:

总结:static修饰函数的时候,该函数只能在本文件内访问,不能再外部或其它文件中直接使用

 原因:改变了函数的作用域

实际项目中static的作用:项目维护,提供安全保证 

3.static修饰局部变量:

5.绝命三问:

为什么全局变量可以跨文件访问?

为什么函数可以跨文件访问?

为什么临时变量具有临时性,全局变量生命周期具有全局性?

注:C程序地址空间不是内存,而是在操作系统中的进程地址空间。

4.sizeof:

sizeof:计算变量和类型在内存中所占空间的大小,单位是字节。

注:使用%zu打印,sizeof的返回值是unsigned int(无符号整形)。

1.基本数据类型:

内置类型:

总结:不同的类型决定了变量在开辟空间所占空间的大小。

 为什么需要根据类型开辟空间?

C语言中为何有多种类型?

 注:sizeof是一个操作符,不是函数。

5.signed,unsigned与整形在内存中的存储:

1.原码,反码,补码

数据在内存中如何存储的?

概念:

2.有符号数: 

存储:

打印:

以原码的形式打印:

3.无符号数:

不区分正负数,原码,反码,补码相同

注:无符号数的打印用%u

4.十进制与二进制之间的互相转换:

5.大小端: 

1.如何产生大小端:

2.如何定义大小端?

3.如何测试大小端? 

6.if else语句

什么是bool类型:

在C99标准中引入_Bool类型,然后通过宏定义的方式写成了bool,目的是为了做到和C++中的bool类型做到兼容

bool变量在内存中所占空间大小:

bool类型的应用:

浮点数与0比较:

那么浮点数之间如何比较呢?

浮点数与0值进行比较:

指针变量与0值的比较:

if 与 else的匹配原则

7.switch case语句

注:当case和break中定义变量的时候需要在中间加上{};

8.do while for 关键字:

注:

任何C程序在编译的时候都会默认打开三个输入输出流:

stdin:标准输入  FILE* stdin   键盘

stdout:标准输出 FILE*stdout  显示器

stderr:标准错误 FILE*stderr    显示器

关于getchar函数:获取字符

getchar函数的返回值:

当通过键盘输入或输出的时候,全部都是”字符“。

9.break关键字:

10.continue关键字:

11.goto 关键字

12.void关键字 

13.return关键字

 1.为什么会输出随机值:

解释:当main函数调用show函数时在栈区上开辟栈帧,str创建临时局部变量在show函数栈帧中,当show函数调用完之后,释放空间。

2.函数的细节:

当创建函数栈帧的时候,如何确定开辟空间大小?

当函数调用完之后,释放空间的时候是否将全部数据清零?

return返回局部变量:

函数在调用完之后会释放空间,函数内部的数据也会无效,那为什么会返回a的值?

解释:当创建局部变量的时候,将局部变量的值保存在寄存器(eax)中,当返回的时候将保存在寄存器eax的值(a)赋给ret。

14.const关键字

1.const修饰一般变量:

既然const修饰的变量可以通过指针的方式进行修改,那const的意义是什么呢?

2.const修饰数组:

3.const修饰指针变量:

1.const放在*的左边:

2.const放在*的右边

3.const既放在*的左边又放在右边

4.const修饰函数

1.const修饰函数的参数:

2.const修饰函数的返回值:

15.易变关键字—volatile

9.结构体关键字——struct

结构体类型的意义:为了描述一个复杂的对象

结构体访问为什么会存在两种访问方式呢?

当我们在函数传参的时候,参数为结构体类型,使用指针访问的时候可以节省内存。

16.联合体关键字——union

成员共用一块内存空间:空间开辟以最大成员为标准向内存申请空间

联合体成员在内存中的空间分布:

实例:判断大小端:

17.枚举关键字——enum

enum:是一组具有强相关性的一组常量,突显相关性。

优点:

18.类型重命名——typedef

1.typedef对各种类型的重命名

2.typedef与#define的区别:

19.关键字类型的总结:

1.数据类型关键字:

2.控制语句关键字:

3.存储类型关键字:

注:存储类型关键字不能同时出现,也就是说定义变量只能出现一个

4.其它关键字:

以上就是对C语言所有关键字的详解,希望能够在学习C语言的过程中对你有所帮助。

举报

相关推荐

0 条评论