第一个关键字:typedef;
我们可以把它理解为类型重命名,也叫类型定义。
//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名 typedef unsigned int uint_32; int main() { //观察num1和num2,这两个变量的类型是一样的 unsigned int num1 = 0; uint_32 num2 = 0; return 0; }
第二个关键字:static
1. 修饰局部变量-称为静态局部变量
2. 修饰全局变量-称为静态全局变量
3. 修饰函数-称为静态函数
一、修饰局部变量
//代码1 #includevoid test() { int i = 0; i++; printf("%d ", i); } int main() { int i = 0; for(i=0; i<10; i++) { test(); } return 0; } //代码2 #include 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; }
对比 代码1 和 代码2 的效果理解static修饰局部变量的意义。
结论: static修饰局部变量改变了变量的生命周期 让静态局部变量出了作用域依然存在,
到程序结束,生命周期才结束。
二、修饰全局变量
//代码1 //add.c int g_val = 2018; //test.c int main() { printf("%dn", g_val); return 0; } //代码2 //add.c static int g_val = 2018; //test.c int main() { printf("%dn", g_val); return 0; }
代码1正常,代码2在编译的时候会出现连接性错误。
结论: 一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,
不能在其他源文件内使用。
三、修饰函数
//代码1 //add.c int Add(int x, int y) { return c+y; } //test.c int main() { printf("%dn", Add(2, 3)); return 0; } //代码2 //add.c static int Add(int x, int y) { return c+y; } //test.c int main() { printf("%dn", Add(2, 3)); return 0; }
代码1正常,代码2在编译的时候会出现连接性错误。
结论: 一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)