一。关键字
1. typedef
typedef unsigned int uint;
struct Node
{
int date;
struct Node* next;
}Node;
//类型重命名
int main()
{
unsigned int a=10;
uint a=10;
struct Node* Phead;
Node* Phead;
{
2.static
- static,顾名思义:静态
- 修饰的变量称为静态变量
2-1 修饰局部变量
void show()
{
static int i = 1;//只初始化一次
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
while (i < 10)
{
show();
i++;
}
}
反汇编看statia修饰的局部变量:
- static修饰的局部变量出了作用域不消毁,实际了局部变量的存储位置.
- 影响了变量的生命周期,生命周期延长至程序的生命周期
2-3修饰全局变量
- 多文件(多个源文件和一个头文件)的使用
- extern:多文件使用全局变量或函数的声明,告知编译器其他文件已定义该 变量,但此处为声明,不能初始化
- 改变全局变量的作用域,仅限定在本文件内使用
- 防止多文件的变量与其重名引发的问题
- 防止被随意更改,安全性提高
2-3修饰函数
3.register
- 尽量定义到寄存器中,优点:快
- 常被定义到被经常被打印的局部变量中,优点:利用率高且占时少
- 可能被定义到寄存器中,因此不可对变量取地址,原因:寄存器中变量无地址
4.define
4-1定义标识符常量
#define NUM 2022
int main()
{
printf("%d\n", NUM);
int n = NUM;
int arr[NUM] = { 0 };
return 0;
}
4-2定义宏
#define ADD(x,y) x+y
int main()
{
int a = 10;
int b = 20;
int c = ADD(a, b);
printf("%d\n", c);
}
二.指针
1-1内存
- 内存会划分为一个个内存单元(一个内存单元是一个字节:1byte)
- 每个内存单元都有一个编号
int a=10;
//向内存申请4个字节的空间,
int a=10;
int* p=&a;
p拿到的是存放变量a的四个字节的内存的首字节的地址
1-2指针的大小
int main()
{
printf("%d\n", sizeof(char*));
printf("%d\n", sizeof(short*));
printf("%d\n", sizeof(int*));
printf("%d\n", sizeof(float*));
printf("%d\n", sizeof(double*));
return 0;
}
- 不管什么类型的指针,都是在创建变量
- 指针变量是用来存放地址的
- 指针变量的大小却决于一个地址存放的时候需要多大的空间
- 32位的机器:32bit位—>4byte , 所以指针变量的大小是4个字节
- 64位的机器:64bit位—>8byte , 所以指针变量的大小是8个字节