11.1 关键字 typedef
typedef 顾名思义是类型定义,这里应该理解为类型重命名。
比如:
上述两个式子是一样的哈!
11.2 关键字static
在 C 语言中:
static 是用来修饰:
1. 修饰局部变量
2. 修饰全局变量
3. 修饰函数
11.2.1 修饰局部变量
// 代码 1 #include <stdio.h> void test () { int i = 0; i ++ ; printf ( "%d ", i); } int main () { int i = 0 ; for ( i = 0 ; i < 10 ; i ++ ) { test (); } return 0 ; }
// 代码 2 #include <stdio.h> void test () { //static 修饰局部变量 static int i = 0 ; i ++ ; printf ( "%d " , i ); } int main () { int i = 0 ; for ( i = 0 ; i < 10 ; i ++ ) { test (); } return 0 ; }
即第一次使用后后面就没有再用了
这里就再牵扯到内存了(先简单提一下):
(其中只是举了些例子,并不是这有这些,而且也不止是只有这三个区,只是主要是这三个哈!)
程序从test.c到test.exe的过程
对于上图:告诉我们static在修饰局部变量的时候是在编译就完成了的,即在程序运行之前。
对比代码1和代码2的效果理解static修饰局部变量的意义。
结论:
static 修饰局部变量改变了变量的生命周期
让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。
11.2.2 修饰全局变量
// 代码 1 //add.c int g_val = 2018 ; //test.c int main () { printf ( "%d\n" , g_val ); return 0 ; } // 代码 2 //add.c static int g_val = 2018 ; //test.c int main () { printf ( "%d\n" , g_val ); return 0 ; }
//上述的add.c 和test.c是指两个不同的源文件
代码 1 正常,代码 2 在编译的时候会出现连接性错误。
结论:
一个全局变量被 static 修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使
用。
这里就要再提到 extern 这个关键字,再使用不同源文件的内容的时候,要在想使用另一个源文件内容的源文件里面进行声明(如下用extern),但是如果另一个源文件那个想要使用的内容被static修饰的话,就算声明也是没有用的(即不能使用)。(如下图)
PS(static修饰全局变量):
1.生命周期还是不变,储存位置也不变,因为还是在静态区, 只是 从全局变量变为了静态变量(都在静态区)
2.静态变量只能在自己的源文件内部使用
11.2.3 修饰函数
//static修饰函数与修饰全局变量是相似的
// 代码 1 //add.c int Add ( int x , int y ) { return c + y ; } //test.c int main () { printf ( "%d\n" , Add ( 2 , 3 )); return 0 ; } // 代码 2 //add.c static int Add ( int x , int y ) { return c + y ; } //test.c int main () { printf ( "%d\n" , Add ( 2 , 3 )); return 0 ; }
代码 1 正常,代码 2 在编译的时候会出现连接性错误.
结论:
一个函数被 static 修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。
剩余关键字后续课程中陆续会讲解