关键字typedef
typedef 是类型定义,类型重定义
int main()
{
//常见关键字
// typedef 类型重命名
typedef int TTT;
int a = 8;// 两个变量是
TTT b = 8;// 一样的意思
printf("%d\n", a);
printf("%d", b);
return 0;
}
上述代码,int 和 TTT 是一样的类型,变量 a 和 b 是一样的意思。
static
static 在 c语言中是用来修饰变量和函数的,被称为静态的
1.修饰局部变量——静态局部变量
我们先来了解变量在内存中是怎么存储的
test()
{
static int i = 1;
i++;// 当加上static ,局部变量被放在了内存的静态区了,之前是放在栈区的,生命周期变长了但是作用域没变
printf("%d ", i);
}
int main()
{
// static 静态的
// 1. 修饰局部变量
int i = 0;
for ( i = 0; i < 5; i++)
{
test();
}
return 0;
}
我们用static来修饰局部变量,如果没有static 上述代码会输出什么?
当我们加上static:
当我们给局部变量加上static 出函数就不会被销毁。
结论:static修改了局部变量的生命周期,但是没改变他的作用域。本质就是把变量放在了静态区了。
修饰全局变量——静态全局变量
extern num;// 申明是其他文件的 证明全局变量有外部链接属性
int main()
{
//2.static 修饰全局变量 修饰之后全局变量没办法外部链接,变成了内部链接 所以改变了他的作用域,从语法上。
printf("%d", num);
}
为了证明全局变量有外部链接属性,我们需要两个c语言文件。
我们在另一个文件定义变量 num 。如果没有static,全局变量就可以在另一个文件中输出。
但是加上static 另一个文件就会报错,说明static 改变了全局变量的作用域,把外部链接属性变成内部链接属性。
结论:static修饰全局变量,使这个变量只能在本源文件中使用,不能在其他文件中使用。
修饰函数——静态函数
extern int add(int x, int y);
int main()
{
//3. static修饰函数 跟全局变量差不多 不准外部链接了
printf("%d", add(2, 3));
}
修饰函数和全局变量差不多一样的作用。也是不准外部链接了。
#define 定义常量和宏
#define TTT 20//定义常量
#define add(x,y) (x + y)
// 宏参数 宏体
int main()
{
// #define 定义常量和宏
printf("%d\n", TTT);// 替换
int sum = add(2, 3);// 宏体替换宏参数
printf("sum = %d\n", sum);
sum = 10 * add(2, 3);
printf("sum = %d\n", sum);
}