关键字typedef
typedef顾名思义是类型定义,这里可以理解为类型重命名。
关键字static
在c语言中,static是用来修饰变量和函数的
- 修饰局部变量-称为静态局部变量
- 修饰全局变量-称为静态全局变量
- 修饰函数-称为静态函数
修饰局部变量
#include <stdio.h>
void test()
{
int a =1;
a++;
printf("%d",a);
}
int main()
{
int i = 0;
while (i<0)
{
test();
i++;
}
return 0;
}
输出结果:
局部变量a的生命周期是进入作用域直到作用域结束。main调用test函数时,a被赋值为1,随后a++,打印a的数值,此时a的值为2,最后生命周期结束,main函数重复调用test函数,但调用一次后a就销毁,所以a的值始终只用从1到2的过程,然后被销毁。
#include <stdio.h>
void test()
{
static int a =1;
a++;
printf("%d",a);
}
int main()
{
int i = 0;
while (i<0)
{
test();
i++;
}
return 0;
}
输出结果:
static修饰局部变量,局部变量出了作用域不被销毁,本质上,static修饰局部变量的时候,改变了变量的存储位置。影响了变量的生命周期,生命周期变长,和程序的生命周期一样。
修饰全局变量
当使用一个不在当前源文件的函数时,需要用extern声明该函数,才能使用。也反映出全局变量具有外部链接属性。
当static修饰全局变量的时候,这个全局变量的外部链接属性就变成了内部链接属性。其他源文件(.c)就不能再使用到这个全局变量了。我们在使用的时候,就感觉作用域变小了。
修饰函数
不在一个头文件,可以声明外部函数进行调用,反映函数也是有外部链接属性的。
一个函数本来是具有外部链接属性的,但是被static修饰的时候,外部连接属性就变成了内部链接属性,其他源文件(.c)就无法使用了。
register
{
//寄存器变量
register int num = 3;
//建议:3存放在寄存器中
return 0;
}