每天进步一点点,坚持带来大改变!!!
前言:
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语言的过程中对你有所帮助。