关键字typedef
typedef 顾名思义是类型定义,这里应该理解为类型重命名。
PS:就像一个人的小名一样,typedef是给变量类型安个小名
这里时给int类型重新安了一个小名叫a,即此时a等于int类型,我们可以用a来创建变量,并将它打印
#include<stdio.h> int main() { typedef int a; //类型重命名 a i = 10; //新名字来定义变量 printf("%d", i); return 0; }
关键字static
在C语言中: static是用来修饰变量和函数的 1. 修饰局部变量-称为静态局部变量
2. 修饰全局变量-称为静态全局变量
3. 修饰函数-称为静态函数
修饰局部变量
未使用static之前
使用static之后
我们发现,使用static之后,打印出的结果与之前有所不同,这是因为未使用static函数之前,每次打印完i之后,会把i的空间进行释放,当再一次进入的时候又会重新给i创建一个空间,并把i的初值赋为1,所以会打印10个1
使用static之后为什么能打印出1-10呢?
这是因为:static用来修饰局部变量时,会把局部变量放到静态区,此时每当打印完i后,即函数执行完后,静态区的i不会被释放,而回继续在这里保存着,当下一次再用到i时,i仍然以上一次出函数的值,作为初值,进行下一次操作
前面未使用static之前的i在每次函数执行结束后会立即被释放,是因为这个临时变量i创建在了栈区,一出函数就被释放,而static修饰后将i放到了静态区,延长了i的生命周期,使i的生命周期几乎和主函数生命周期一样长
static修饰全局变量
当我们在一个.c文件里创建了一个变量,并想在另一个.c文件里面使用时,我们要加extern来在要使用的.c文件里声明一下,才能加以使用
如下面这样:
这里我们在test1.c里创建了变量i,在test.c里使用变量i,并在test.c里面使用extern声明一下并使用
用static修饰外部变量之后
我们发现程序会报错
此时程序无法解析来自外部的变量i,但是我们在test1.c文件里使用i时却能正常使用
这是因为:用static修饰全局变量之后,它会将局部变量的外部链接属性变为内部连接属性,意思就是用static修饰全局变量之后,你想在另一个.c文件里面使用这个变量的时候,会使用不了。
用static修饰函数
在一个.c文件引用另一个.c文件的函数且未使用static之前
打印正常
使用static之后
此时无法正常打印
而我们在.c文件使用static之后
此时可正常打印
这是因为:当static修饰外部函数时,会使这个外部函数失去外部连接性,而保持内部链接性,因此才会报错
总结:
当static修饰局部变量时,该变量会被放到静态区,在每次使用完之后不会被释放临时变量所用的内存,生命周期会延迟到程序结束。
当static修饰全局变量和函数时,全局变量和函数会失去外部链接性,而保持内部链接性,因此当static修饰全局变量和函数时在另一个.c文件里会无法引用