先看到下面的代码
double val;
double *pd = &val;
double *pd2 = pd;
以前看到第三句的时候以为它和double **pd2 = &pd
是等价的,都是指向指针的指针,今天才发现不是,第三句其实和第二句是等价的,指针pd指向的是变量val,所以其本身存储的值就是val的地址,所以用pd去初始化指针pd2,就是用val的地址去初始化pd2,所以pd2指向的也是val,而pd2本身的值,也是val的地址:
而 double **pd2 = &pd
呢,pd2
才是真正指向指针的指针,用&提取了pd
本身的地址去初始化pd2
,所以pd2
本身存储的值是pd
的地址,*pd2
的值就是pd所存储的地址,即val的地址, **pd2
就是val的值,还有指向指针的指针的指针,都是一样的原理: