常见关键字
auto自动:
int main() {
int a = 10; //auto int a = 10; a为局部变量。在main函数结束后自动释放,我们在创建变量时把auto省略
return 0;
}
register寄存器:
register int a = 10; //建议把a定义成寄存器变量。编译器判断要不要把a放到寄存器中

signed/unsigned:
int a = -2;
//signed int a = -2
//signed关键字被省略
unsigned int num = 1;
//无符号整型,即使定义赋值负数,存储的值依然是正数
typedef类型定义关键字(类型重定义):
typedef unsigned int u_int; //将unsigned int 重新定义为u_int(别名)
u_int a = 10;
static:
(1)static修饰局部变量:局部变量的生命周期变长
void test() {
int a = 1;
a++;
static int b = 1;
b++;
printf("%d\\n",a); //2 2 2 2 2
printf("%d\\n",b); //2 3 4 5 6
}
int main() {
int i = 0;
for(i = 0;i<5;i++) {
test();
}
return 0;
}
(2)static修饰全局变量:改变了变量的作用域,让静态的全局变量只能在自己所在的源文件内部使用。出了源文件就没法再使用了
文件1:
int a = 10;
static int b = 20; //static修饰变量b使b只能在自己的源文件中使用
文件2:
int main() {
extern int a; //extern关键字用来声明外部函数
extern int b;
printf("%d\\n", a); //a可以被打印
printf("%d\\n", b); //b不可以被打印
return 0;
}
(3)static修饰函数:也是改变了函数的作用域(static修饰函数改变了函数的链接属性。外部链接属性变成了内部链接属性)
文件一:
int Add(int x, int y) {
return x+y;
}
static int Subtract(int x, int y) {
return x-y;
}
文件二:
//声明外部函数
extern int Add(int, int);
extern int Subtract(int, int);
int main() {
int a = 10;
int b = 15;
printf("%d\\n",Add(a,b));
printf("%d\\n",Subtract(a,b)); //Subtract被用了static关键字修饰,无法在源文件外部使用
return 0;
}
struct
union
volatile
#define定义常量和宏
定义标识符常量:
#define MAX 100
宏的定义:
int Max(int x, int y) {
return x>y?x:y;
}
//宏的实现更加简洁
#define MAX(X,Y) (X>Y?X:Y)
int main() {
int a = 10;
int b = 20;
printf("%d\\n", Max(a,b));
printf("%d\\n", MAX(a,b));
return 0;
}
指针
指针变量:用来存放地址的变量
如何产生地址:
32位(64位):计算机中有32根地址线、数据线(一根数据线上可以通过正电或者负电。正电为1,负电为0)

0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0001
...
1000 0000 0000 0000 0000 0000 0000 0000
...
1111 1111 1111 1111 1111 1111 1111 1111