二级指针
简单来说,二级指针存储一级指针的地址,指向一级指针。
double a = 0, b = 0, c = 0, d = 0;
double* p0 = &a;
double* p1 = &b;
double* p2 = &c;
double* p3 = &d;
double** s = &p0;
如果a、b、c、d的地址是连续分配的,指针p0、p1、p2、p3的地址也是连续分配的,那么下面三种情况:
s + 1; //&p1 移动4个字节 类型是double**
*s + 1; //&b 移动8个字节 类型是double*
**s + 1; //a + 1 = 1 类型是double
我们知道,指针加一的作用是加上其指向内容的数据类型的长度。
s开始指向的是一级指针p0,p0是指针,长度是4个字节,那么s+1就会移动4个字节,所以s指向了p1。
*s是s解引用的形式,也就是p0指针本身,而p0指针指向变量a,变量a的长度是8个字节,那么 *s+1就会移动8个字节,所以 *s(等同于p0)指向了b。
**s 是 *s解引用的形式,也就是变量a,那么 **s+1就是a变量本身加一,所以变量a由0变为1。
二级指针的应用:二维数组
数组指针和指针数组
int main() {
int a = 0, b = 1, c = 3, d = 4;
int* pr[4] = {
&a,&b,&c,