首先,C中一般的变量存放在各自的内存中.
一般的变量比如int a=5; a是一个盒子,里面放了一个小纸条,上面写着5.
int a=5;
int* b=&a;
这两句的意思是,a还是一个盒子,里面还是一个小纸条,上面写着5.
而b也是个盒子,里面放着一个纸条,这个纸条上写着【a这个盒子的位置】.
注意,b里纸条上写的是a盒子的位置,而不是a盒子内纸条的值.
比如,上面写着,a盒子在你家床底下.
你怎么通过b得到a中的小纸条(写着5)?
用*b.
当你输出a的值时,是输出a盒子内小纸条上的内容,也就是5.
当你输出b的值时,是输出b盒子内小纸条上的内容 :也就是【a这个盒子的位置】.
b盒子有啥用呢?
当你知道了b这个盒子,你就能用*b 直接拿到a盒子里纸条上的内容,也就是5.
如果你只是这么看待问题的话,指针的问题大体就解决了80%.
int** c;
之前的b里放着int a这个盒子的位置.
而c盒子里的纸条可以放类似 int* a这种盒子的位置.
int*** d; 类似的,可以放类似int** c这种盒子的位置.
当你能理解并运用这种类比后,指针的问题就解决了90%.
还有10%是啥问题?内存偏移等等问题,你可以自己写程序调试下慢慢试这10%的规律.