大家好我是沐曦希
文章目录
- 关键字分类
- 补充内容
-
- 第一个C程序
- 定义与声明
-
- 变量
- 变量的分类
- 变量的作用域
- 变量的生命周期
- 作用域 vs 生命周期
- 最宽宏大量的关键字 - auto
- 最快的关键字 - register
-
- 存储金字塔
- ?寄存器的认识
- 寄存器存在的本质
- register 修饰变量
- 写在最后
文章图片
关键字分类 一般的书上,C语言的关键字都是32个,但是这个都是 C90(C89) 的标准。其实 C99 后又新增了5个关键字。不过,目前主流的编译器,对 C99 支持的并不好,按照C90标准 ,即认为32个。
关键字 | 说明 |
---|---|
auto | 声明自动变量 |
short | 声明短整型变量或函数 |
int | 声明整型变量或函数 |
long | 声明长整型变量或函数 |
float | 声明浮点型变量或函数 |
double | 声明双精度变量或函数 |
char | 声明字符型变量或函数 |
struct | 声明结构体变量或函数 |
union | 声明共用数据类型 |
enum | 声明枚举类型 |
typedef | 用以给数据类型取别名 |
const | 声明只读变量 |
unsigned | 声明无符号类型变量或函数 |
signed | 声明有符号类型变量或函数 |
extern | 声明变量是在其他文件正声明 |
register | 声明寄存器变量 |
static | 声明静态变量 |
volatile | 说明变量在程序执行中可被隐含地改变 |
void | 声明函数无返回值或无参数,声明无类型指针 |
if | 条件语句 |
else | 条件语句否定分支(与 if 连用) |
switch | 用于开关语句 |
case | 开关语句分支 |
for | 一种循环语句 |
do | 循环语句的循环体 |
while | 循环语句的循环条件 |
goto | 无条件跳转语句 |
continue | 结束当前循环,开始下一轮循环 |
break | 跳出当前循环 |
default | 开关语句中的“其他”分支 |
sizeof | 计算数据类型长度 |
return | 子程序返回语句(可以带参数,也可不带参数)循环条件 |
#include
#include//windows.h系统头文件,仅仅是为了停屏
int main()
{
printf("hello world!\n");
system("pause");
//pause停屏
return 0;
}
文件代码在进行生成解决方案后会转换成可执行程序(二进制文件 .exe)
文章图片
可以通过清空解决方案来清空可执行程序
文章图片
- 在windows中,双击的本质运行程序,将程序加载到内存中。
- 任何程序在被被运行之前都必须被加载到内存当中。
- 加载到内存中,速度快。
文章图片
定义与声明 变量
在内存中开辟特定大小的空间,用来保存数据变量的定义
类型变量名 = 默认值
int a = 10;
char c = 'c';
定义变量的原因:因为有数据需要暂时被保存起来,等待后续处理。
变量的本质
定义:开辟空间,只能有一次。定义变量的本质:在内存中开辟一块空间,用来保存数据。(为何一定是内存:因为定义变量,也是程序逻辑的一部分,程序已经被加载到内存)
- 所有的变量的本质都是要在内存的某个位置开辟空间的。
- 程序运行,需要加载到内存中
- 程序计算,需要使用变量
声明:告知,可以多次。
int a = 10;
//a的定义
a = 20;
//赋值
a = 100;
//赋值
变量的分类
变量分为:局部变量和全局变量
局部变量:包含在代码块中的变量叫做局部变量。局部变量具有临时性。进入代码块,自动形成局部变量,退出代码块自动释放。[网上很多说函数中的变量是局部变量,不能说错,但说法是不准确的](定义在代码块内)
全局变量:在所有函数外定义的变量,叫做全局变量。全局变量具有全局性。(定义在代码块外)
代码块:用{}括起来的区域,就叫做代码块
#include
int g_val = 100;
//全局变量
int main()
{
int a = 10;
//局部变量,main函数也是函数,也有代码块{}
if(a == 10)
{
int b = 10;
//局部变量
}
printf("a=%d\n", a);
return 0;
}
变量的作用域
作用域:指的是该变量的可以被正常访问的代码区域。其中全局变量:
局部变量:只在本代码块内有效。
全局变量:整个程序运行期间,都有效。
- 在任何代码块中都可以被访问
- 在任何代码块中都可以被访问,甚至被修改。
- 当全局变量与局部变量同名时,局部变量优先。
#include
int g_vax = 10;
//全局变量
void test()
{
int g_val = 100;
//局部变量的g_val只能在本代码被访问
printf("%d\n", g_val);
//在全局变量g_val任何代码块中都可以被访问,甚至被修改
//输出的是局部,也就是局部和全部同名的时候,优先局部。
}
int main()
{
test();
printf("%d\n", g_vax);
//在任何代码块中都可以被访问
return 0;
}
文章图片
变量的生命周期
生命周期概念:指的是该变量从定义到被释放的时间范围,所谓的释放,指的是曾经开辟的空间”被释放“。作用域 vs 生命周期
局部变量: 进入代码块,形成局部变量[开辟空间],退出代码块,"释放"局部变量。
全局变量: 定义完成之后,程序运行的整个生命周期内,该变量一直都有效。
作用域:衡量变量影响的范围,该变量的有效作用域。
生命周期:描述的是变量生存时间的长短。时间的概念:什么时候被开辟,什么时候被释放。
文章图片
最宽宏大量的关键字 - auto
如何使用:一般在代码块中定义的变量,即局部变量,默认都是auto修饰的,不过一般省略。
默认的所有变量都是auto吗?不是,一般用来修饰局部变量
局部变量包括自动变量,临时变量和局部变量。
#include
int main()
{
for (int i = 0;
i < 10;
i++) //局部变量i也可以被auto修饰
{
printf("i=%d\n", i);
if (1)
{
auto int j = 0;
//自动变量
printf("before: j=%d\n", j);
j += 1;
printf("after : j=%d\n", j);
}
}
return 0;
}
文章图片
auto已经很老,基本上不使用了。
最快的关键字 - register
CPU主要是负责进行计算的硬件单元,但是为了方便运算,一般第一步需要先把数据从内存读取到CPU内,那么也就需要CPU具有一定的数据临时存储能力。注意:CPU并不是当前要计算了,才把特定数据读到CPU里面,那样太慢了。存储金字塔
所以现代CPU内,都集成了一组叫做寄存器的硬件,用来做临时数据的保存。
文章图片
距离CPU越近的存储硬件,速度越快。
?寄存器的认识
CPU内集成了一组存储硬件即可,这组硬件叫做寄存器。寄存器存在的本质
在硬件层面上,提高计算机的运算效率。因为不需要从内存里读取数据啦。register 修饰变量
尽量将所修饰变量,放入CPU寄存区中,从而达到提高效率的目的寄存器–cache–内存–SSD/flash/硬盘–光盘–磁盘
那么什么样的变量,可以采用register呢?
1.局部的(全局会导致CPU寄存器被长时间占用)
2.不会被写入的(写入就需要写回内存,后续还要读取检测的话,就无意义了)
3.高频被读取的(提高效率所在)
4.如果要使用,请不要大量使用,因为寄存器数量有限
5.register修饰的变量,不能取地址(因为已经放在寄存区中了嘛,地址是内存相关的概念)
硬盘通过缓存技术成内存,内存通过缓存技术成寄存器。
距离CPU越近的储存单元,效率越高,单价成本越高。
距离CPU越远的储存单元,效率越低,单价成本越便宜。
对任何一种硬件而言,充当上游硬件的缓存。
例:内存可以看成硬盘的一个大缓存;cache和寄存器相当于内存某一种缓存。
CPU访问数据的时,以最小的成本达到最高的效率。
#include
int main()
{
register int a = 10;
printf("%p\n", &a);
return 0;
}
文章图片
写在最后 友友们觉得不错的可以给个关注,点赞或者收藏哦!感谢各位友友们的支持。
【C|C语言深度解剖篇——关键字&&补充内容】你的??点赞是我创作的动力的源泉
你的?收藏是我奋斗的方向
你的关注是对我最大的支持
你的??评论是我前进的明灯
创作不易,希望大佬你支持一下小沐吧
推荐阅读
- c语言|c语言 猜字游戏,【c语言】 小游戏――猜字游戏
- 笔记|C语言的猜字游戏
- c语言|哈夫曼树和哈夫曼编码
- qt|Qt 使用QDialog实现界面遮罩(蒙版)
- c++|qt基础入门教程
- C语言-002
- java|Java 中的超快微服务( 当Microstream遇上Open Liberty)
- C语言简单实现“猜数字小游戏”
- C/C++详解如何实现文件备份