signed
有符号修饰符
unsigned
无符号修饰符
void
空类型
auto
理解不了,不知道有啥用
extern
可以将工程内其他文件定义的函数或者变量在当前文件用extern声明,声明后即可调用
要注意的是如果该函数或变量不能被static修饰,如果是被static修饰的变量或函数是不可以被extern外部声明的
extern int i;//i需要在其他文件定义,在此声明
int main() {
printf("%d\n",i);
return 0;
}
register
static静态修饰
1、静态全局变量
改变全局变量的作用域为当前文件
static int i = 12;
//作用域为当前文件
int main() {
printf("%d\n",i);
return 0;
}
2、静态局部变量
改变局部变量的生命周期至结束
int Add(int a) {
static int b = 10;//生命周期延长,函数结束变量不销毁
b++;
return a + b;
}
int main() {
printf("%d\n",Add(12));
printf("%d\n",Add(12));
return 0;
}
3、静态函数
该函数作用域仅为当前文件内
static int Add(int a) {
int b = 10;
b++;
return a + b;
}
const
const修饰的常变量
const 修饰的变量 == 常量
const int Day = 7;
int main()
{
printf("%d\n",Day);
}
常量的生命周期
常量是存储在全局区,全局区的内存会在程序结束后由系统释放,所以常量的生命周期是到程序结束才会被释放
全局常量和局部常量
常量被定义在函数外部时,该常量为全局常量,作用域为整个工程,在其他文件使用只需要extern声明即可。
常量被定义在函数内部时,此时该常量为局部常量,作用域为函数内。
static const修饰的全局常量
static const修饰的全局常量会限制该常量作用据为本文件,用extern声明也不行。
typedef
1、给数据类型起个别名
#include <stdio.h>
typedef unsigned int Byte;
int main() {
Byte a=10;
printf("%d\n",a);
return 0;
}
2、结构体别名
typedef struct student{
char* name;
char* tel;
}stu;
int main() {
stu s;
s.name = "laoliu";
s.tel = "13991939129";
printf("%s\n",s.name);
printf("%s\n",s.tel);
return 0;
}
volatile
易变修饰,告诉编译器这个变量是容易改变的,可以避免变量被优化。
#deifne
1、#define宏定义常量
代码:
#define Day 7
int main()
{
printf("%d\n",Day);
}
注:建议宏定义时不加分号";“,因为 #define 会将代码中的常量名,全部替换为定义的值,包括分号”;"
如下所示,如果加了分号,
编译器会在预编译时将main函数中的Day替换为7;
因此会报错。
#define Day 7;
int main()
{
printf("%d\n",Day);
}