
第一个关键字: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条)