【1】指针
地址常量:不可写的内存地址值
指针变量:专用于存储地址的变量
【2】定义指针
int a = 10;
int *p = &a;
char b = 'K';
char *w = &b;
【3】运算符
1--->&
取地址符:获取数据的内存地址
2--->*
1、定义指针变量时代表类型的一部分
2、指针解引用:通过地址获取地址里的内容(钥匙)
3、指针的降级(行指针-->列指针)
3--->+-
指针加减:加减的是单位长度。
单位长度:由指向数据类型所占的字节数决定。
4--->[]
指针加单位长度后,取内容运算
a[i] <==> *(a+i)
【4】指针与数组
int a[5] = {0,1,2,3,4}; //a:20字节
int *p = a; //p:4字节
p[3] <==> *(p+3) //p是变量
a[3] <==> *(a+3) //a是常量
【5】指针变量占4字节
【6】数组指针
本质是指针,用于专存储 数组的地址,多用于指向二维数组
char a[3][4] = {0};
char (*p)[4] = a; //size == 4;
a[i][j]; <==> *(a[i]+j); <==> *(*(a+i)+j);
p[i][j]; <==> *(p[i]+j); <==> *(*(p+i)+j);
a:地址常量
p:指针变量
【7】二级指针
short a = 10; //size == 2
short *p = &a; //size == 4
short **w = &p; //size == 4
w<==>&p
*w<==>p<==>&a
**w<==>*p<==>a
【8】void
void *p; //泛型指针,使用时需要强制类型转换
【9】const
const int *p; //常量化*p
int *const w; //常量化w
【10】NULL
NULL <==> 0 //防止野指针的形成