文章目录
🍁了解关键字分类
关键字及其说明
-  
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
子程序返回语句(可以带参数,也可不带参数)循环条件
 
🍁理解变量、定义与声明
问题一:什么是变量❓
问题二:如何定义变量(怎么用)❓
问题三:为什么要定义变量(为什么)❓
变量定义的本质
🍁三个关键字
最宽宏大量的关键字- auto
由于介绍auto涉及到变量,所以我们想从变量这个地方开始说起
变量的分类——补充内容
//局部变量:包含在代码块中的变量叫做局部变量。局部变量具有临时性。进入代码块,自动形成局部变量,退出代码块自动 释放。[网上很多说函数中的变量是局部变量,不能说错,但说法是不准确的] 
//全局变量:在所有函数外定义的变量,叫做全局变量。全局变量具有全局性。 
//代码块:用{}括起来的区域,就叫做代码块  
#include <stdio.h> 
#include <windows.h> 
int g_x = 100; //全局变量 
int main() 
{ 
    int x = 10; //局部变量,main函数也是函数,也有代码块{} 
    printf("x:%d\n", x); 
    system("pause"); 
    return 0; 
}
 
变量的作用域—— 补充内容
//作用域概念:指的是该变量的可以被正常访问的代码区域  
#include <stdio.h> 
#include <windows.h> 
int main() 
{ 
    int x = 10; 
    if (x == 10)
    { 
        int y = 20; 
        printf("局部: x: %d, y: %d\n", x, y);//y只能在本代码块内有效 
    }
    printf("局部: x: %d, y: %d\n", x, y); //报错,y不能被访问 
    system("pause");
    return 0;
}
//局部变量:只在本代码块内有效 //例子同上 
//全局变量:整个程序运行期间,都有效
#include <stdio.h> 
#include <windows.h> 
int g_x = 100; //全局变量 
void show() 
{ 
    printf("show: 全局: %d\n", g_x); //在任何代码块中都可以被访问 
}
int main() 
{
     show(); 
     printf("main: 全局: %d\n", g_x); //在任何代码块中都可以被访问,甚至被修改 
     system("pause"); 
     return 0; 
} 
#include <stdio.h> 
#include <windows.h>
int g_x = 100; //全局变量 
int main() 
{ 
    int g_x = 10; //局部变量,与全局同名
    printf("g_x:%d\n", g_x); //输出的是局部,也就是局部和全部同名的时候,优先局部。所以,强烈不建议这样
    system("pause"); 
    return 0; 
}
 
变量的生命周期——补充内容
auto 相关
//如何使用:一般在代码块中定义的变量,即局部变量,默认都是auto修饰的,不过一般省略 
//默认的所有变量都是auto吗?不是,一般用来修饰局部变量 
//中断一下:后面我们所到的,局部变量,自动变量,临时变量,都是一回事。我们统称局部变量
#include <stdio.h> 
#include <windows.h> 
int main() 
{
    for (int i = 0; i < 10; i++)
    {
        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); 
        }
    }
    system("pause"); 
    return 0; 
}
 
最快的关键字—— register
怎么去理解呢?我们可以通过一幅图来理解:
 
距离CPU越近的存储硬件,速度越快。
寄存器存在的本质 :在硬件层面上,提高计算机的运算效率。因为不需要从内存里读取数据
register 修饰变量 :尽量将所修饰变量,放入CPU寄存区中,从而达到提高效率的目的
问题来了:
#include <stdio.h> 
#include <windows.h> 
int main() 
{ 
    register int a = 0; 
    printf("&a = %p\n", &a); //编译器报错:错误 1 error C2103: 寄存器变量上的“&” 
    //注意,这里不是所有的编译器都报错
    //鉴于同学们刚开始学,不给大家增加负担,我们后面再慢慢引入另一个编译器。 
    system("pause"); 
    return 0; 
}
 
我们不妨来测试一下:

不过现在我们是不需要自己手动去加该关键字的了,原因:该关键字,不用管,因为现在的编译器,已经很智能了,能进行比人更好的代码优化。 早期编译器需要人为指定register,来进行手动优化,现在不需要了。
最名不符实的关键字 —static
全局变量和函数的两个结论 - 补充内容
修饰变量
1.修饰全局变量,该全局变量只能在本文件内被使用。
总结:static修饰全局变量,影响的是作用域的概念,函数类似。而生命周期是不变的。
2.修饰局部变量
 void fun1() 
 { 
     int i = 0; 
     i++; 
     printf("no static: i=%d\n", i); 
 }
void fun2()
{ 
    static int i = 0; 
    i++; 
    printf("has static: i=%d\n", i);
}
int main() 
{ 
    for (int i = 0; i < 10; i++)
    { 
        fun1(); fun2(); }
    system("pause"); 
    return 0;
}
//结论:static修饰局部变量,变量的生命周期变成全局周期。(作用域不变)
//修饰函数,该函数只能在本文件内被使用。
 
🚩结语
说来惭愧,今天又是摆烂的一天,不知不觉又快到了十二点,这一天天过的可真的快啊,本次就先到这里结束啦!🌹











