有个关于指针的问题想请教一下, 比如定义的时候,定义成 int **p;这里的 **p和 *p有什么区别?最好能给个例子,谢谢了。
理解这个问题,要把几种类型结合紧密一些。
int i; //整型数 i
int * p; //整型数的指针 p
int ** pp; //整型数的指针的指针pp
于是有,i是整型数;p可以指向整型数,是一个整型数的地址;pp可以指向整型数的指针,是一个整型数的指针的地址
再分析,i的地址&i,是一个整型数的地址,也就是一个整型数的指针;p的地址&p,是一个整型数的指针的地址,也就是整型数指针的指针;pp的地址&pp,是一个整型数指针的指针的地址,也就是一个整型数指针的指针的指针
综上有,p可以用&i赋值,pp可以用&p赋值。
反过来有,*pp的结果可以赋值给p,*p的结果可以赋值给i,递推关系,**pp可以赋值给i。(注意!思考:为什么上面一条没有递推关系——pp可以用&&i赋值?)
以此类推,无论有多少个*,都可以用递推关系找到其意义。如果得到一个指针,无论是几级指针,都可以对其取内容。
所以最后,**p和*p的区别,重点也就在于,在对他们取内容时,其中的值的类型是不同的。对一个指针取内容,一定要明确其内容是什么数据类型(这里的类型是具体的,int型的指针和char型的指针也算得上是不同的类型)