指针是一种数据类型, 指针占据的内存大小取决于计算机, 指针保存的是内存地址
在创建指针时, 如果暂时用不到, 应该指向NULL
释放指针后, 应该指向NULL, 防止产生野指针
*p解引用, 操作p所指向的内存空间
&p获得p的地址
*
- * 在声明的时候声明变量为指针
- * 在使用的时候为操作指针所指向的内存空间
野指针\空指针\万能指针
野: 指向未知内存的指针
空: 指向NULL的指针
万: void *p; 可以指向任意变量的内存空间
const 修饰指针变量
const int* p; 不能通过p间接改变内存空间的值
int* const p: 不能修改p的指向
指针的步长
指针的步长由指针所指向的内存空间所决定
如果指向int 那么指针+1 就是移动4个字节
如果指向double 那么指针+1 就是移动8个字节
指针传递
如果定义了一个指针int *p =&a; 实参传递p,
形参如果是*p2,则p2接受的是p所存放的内存空间地址如果对p2赋值, 修改的是p2自己的内存空间, p指向的内存空间没有改变
如果对*p2赋值, 修改的是p所指向内存空间存放的内容如果想修改实参p的指向, 应该传递&p, 形参应该是**p2, 则p2接受的是p的内存地址
如果对p2赋值, 修改的是p2自己的内存空间, p指向的内存空间没有改变
如果对*p2赋值, 修改的是p2指向的内存空间, 也就是p的内存空间, p的内存空间所存放的内容会被改变
如果对**p2赋值, 修改的是p2指向的内存空间所指向的内存空间, 修改的是p所指向内存空间存放的内容
用1级指针形参,去间接修改了0级指针(实参)的值。
用2级指针形参,去间接修改了1级指针(实参)的值。
用3级指针形参,去间接修改了2级指针(实参)的值。
用n级指针形参,去间接修改了n-1级指针(实参)的值。
void test(){
int b;
int *q = &b; //0级指针
int **t = &q;
int ***m = &t;
}
指针数组
数组的每个元素都是指针类型
char *a[] = { “aaaaaaa”, “bbbbbbbbbb”, “ccccccc” };