1.c语言提供的,不能自己创建关键字
2.变量名不能是关键字
auto break case char corst continue defult do double else enum extern float goto if
int long register return short signed sizeof static struct switch typdef union unsigned void volatile while
auto 是自动的 每个局部变量都是auto修饰的
int main()
{
//int char 错误
{
auto int a = 10;//自动创建,自动销毁的 自动变量
//auto 一半省略掉了
//auto 新的c语言语法中也有其他用法 暂时不考虑
}
return 0;
}
extern 是用来申明外部符号的
register 寄存器关键字
计算机中,数据可以存到哪里呢?
寄存器 更小
高速缓存 几十MB
内存 8G-16G
硬盘 500G 买的
网盘 2T 免费
造价越高,速度越快,空间越小
cpu:中央处理器
int main()
{
//大量/频繁被使用的数据,想放在寄存器中,提升效率
register int num = 100;//建议num的值存放在寄存器中
return 0;
}
signed 有符号的 10 -20
unsigned 无符号的
static 静态的
union 联合体 共用体
void 无 空
define include 不是关键字,是预处理指令
typedef 顾名思义是类型定义,这里应该理解为类型重命名
typedef unsigned int u_int;
//张三-小三
int main()
{
unsigned int num = 100;
u_int num2 = 100;
return 0;
}
static-静态的
1.static修饰局部变量
2.static修饰全局变量
3.static修饰函数
void test()
{
int a = 1;
a++;
printf("%d ", a);//2 2 2 2 2 2 2 2 2 2
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
void test()
{
static int a = 1;
a++;
printf("%d ", a);//2 3 4 5 6 7 8 9 10 11
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
第一段代码a在栈区,为局部变量,static修饰后,改变了其存储类型,进入静态区,成为全局变量
static修饰局部变量,改变了局部变量的生命周期(本质上是改变了变量的存储类型)
栈区 局部变量 函数的参数 |
堆区 动态内存分配 |
静态区 全局变量 static修饰的静态变量 |
全局变量在整个工程中都可以使用
static修饰全局变量使得这个全局变量只能在自己所在的源文件(.c)内部可以使用,其他源文件不能使用
全局变量,在其他源文件内部可以被使用,是因为全局变量具有外部链接属性
但是被static修饰后就变成了内部链接属性,其他源文件就不能链接到这个静态的全局变量了
static修饰函数,使得函数只能在自己所在的源文件内部使用,不能在其他源文件内部使用
本质上:static是将函数外部链接属性变成了内部链接属性(和static修饰全局变量一样)