文章目录
- 1. 常见关键字
- 2. 关键字 typedef
- 3. 关键字 static
- 3.1 修饰局部变量
- 3.2 修饰全局变量
- 3.3 修饰函数
- 4. define 定义常量和宏
1. 常见关键字
- C语言提供了丰富的关键字,这些关键字都是语言本身预先设定好的,用户自己是不能创造关键字的。
- 这里先主要讲解关键字 typedef 和关键字 static。
2. 关键字 typedef
- 在使用例如 unsigned int 这种很长的类型的时候,类型过长看的都烦,此时就需要使用 typedef 来对这类又臭又长的类型进行简化了。
- typedef 顾名思义是类型定义,这里应该理解为类型重命名。
举个栗子
//关键字 typedef#include <stdio.h>typedef unsigned int uint;
//将 unsigned int 重命名为 uint, 所以 uint 也是一个类型名int main()
{//观察num1和num2,这两个变量的类型是一样的unsigned int num1 = 0;uint num2 = 0;//unsigned int 等价于 uint,只是名字不同而已return 0;
}
3. 关键字 static
static 是用来啊修饰变量和函数的
- 修饰局部变量 - 称为静态局部变量;
- 修饰全局变量 - 称为静态全局变量;
- 修饰函数 - 称为静态函数;
3.1 修饰局部变量
- static 修饰局部变量改变了局部变量的生命周期;
- 让静态局部变量出了作用域依然存在,直到程序结束的时候,局部变量的生命周期才会结束。
举个栗子
- 不加 static 的局部变量,出了作用域就会结束生命周期,变量销毁,下次再进作用域时重新创建局部变量,所以这种情况下对变量进行操作的值不会保存下来。
//关键字 static#include <stdio.h>void test()
{int a = 1;//每次进来都会重新创建一个变量 a 并赋值为 1a++;printf("%d ", a);//打印2
}
//出了作用域之后 a 的生命周期结束,将变量 a 销毁;
//不会保存 a++ 之后的值 2int main()
{int i = 0;while (i < 10)//这样一个动作重复十次之后就会打印10个2{test();i++;}return 0;
}
- 加了 static 的局部变量,即使出了作用域也不会销毁,会将该变量的生命周期延长,在作用域中对局部变量进行的操作将会保留下来直到程序结束。
#include <stdio.h>void test()
{static int a = 1;//除了第一次进入,之后每次进来都会直接跳过这步操作a++;printf("%d ", a);//2 3 4 5 6 7 8 9 10 11
}
//出了作用域之后 a 的生命周期不会结束;
//会保存每次 a++ 之后的值直到循环结束int main()
{int i = 0;while (i < 10){test();i++;}return 0;
}
3.2 修饰全局变量
- 不用 static 修饰全局变量:一般情况下,在一个程序内定义的全局变量,可以在多个源文件当中使用。
- 使用 static 修饰全局变量:而在二般情况下,假设我创建的全局变量我就是不给其他人用,这个时候就可以用上 static 来修饰全局变量,让全局变量只能在本源文件下使用。
- 在使用 static 修饰全局变量的时候,感官上来说就是使全局变量的作用域变小了。
3.3 修饰函数
-
函数和全局变量一样,在本源文件底下写的函数,在其他源文件处也可以使用。
-
static 修饰函数和修饰全局变量非常类似,也是把自己写的函数框在本源文件底下不给别人用。
-
不用 static 修饰函数:其他源文件可以调用该函数。
- 使用 static 修饰函数:其他源文件不可以调用该函数。
4. define 定义常量和宏
define 定义标识符常量
#include <stdio.h>//define定义标识符常量
#define MAX 1000int main()
{printf("%d\n", MAX);int n = MAX;printf("%d\n", n);int arr[MAX] = { 0 };return 0;
}
define 定义宏
- 特点:宏有参数
//define定义宏
// ↓宏名 ↓宏体
#define ADD(x, y) ((x)+(y))
// ↑参数,参数无类型
#include <stdio.h>
int main()
{int sum = ADD(2, 3);printf("sum = %d\n", sum);sum = 10*ADD(2, 3);printf("sum = %d\n", sum);return 0;
}