关键字:
- C语言提供关键字,不可自己创建关键字
- 关键字不能做变量名
常见关键字:auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、sizeof、static、struct、switch、typedef、union、unsigned、void、volatile、while
Register:大量频繁被使用的数据可以放到寄存器中,提升效率。
Return:返回。
Signed:有符号的。
Unsigned:无符号的。
Void:空。
Typedef:类型重定义,如:
typedef unsigned int u_int;
int main()
{
unsigned int num = 100;
u_int num2 = 100;
return 0;
}
将unsighed int 可以重新定义为U_int,使用typedef。
Static:静态的
- 修饰局部变量
- 修饰全局变量
- 修饰函数
void test()
{
int a = 1;
a++;
printf("%d", a);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
打印的是2222222222,根据之前的局部变量可以理解先执行void打赢了一个2,然后循环一次再执行test(),这是原本a=2已经销毁,重新a=1,a++,所以打印还是2,依次打印十个2.
void test()
{
static int a = 1;
a++;
printf("%d", a);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
.
略微改动代码在test里int a前加static以后。得到结果如下:
分析原因步骤为:第一次调动结果第一次循环后a++变成2,然后第二次循环进入test()a没有销毁,直接从a=2开始+1.static修饰局部变量后改变变量存储类型导致改变变量的生命周期。
详细讲解:内存分为:
- 栈区:局部变量、函数的参数
- 堆区:动态内存分配的
- 静态区:全局变量、static修饰的静态变量
上述statci操作将a从栈区转至静态区,改变了变量的存储类型。
下面学习static修饰全局变量:
首先一个全局变量如下
但是用static修饰全局变量后,如下
故,static修饰全局变量,使这个变量只能在自己所在的源文件内部使用,其他源文件不可使用。
全局变量在其他源文件内部可以使用因为全局变量具有外部链接属性,但是被static修饰后,变成了内部链接属性,其他源文件就不能链接到这个静态的全局变量了。
当static修饰函数:
首先全局函数使用如下
用static修饰后,得到如下结果。
说明,static修饰函数,使函数只能在自己所在源文件内部使用,本质上,static是将函数的外部链接属性变成内部链接属性。