可能定义的时候分开写会有助于理解:
inta[5]={2,4,6,8,10};
int*p;//定义了一个指向整型变量的指针,p存放int类型的地址;
int**k//定义了一个指向指向整型变量的指针的指针(这句话有点拗口,自己慢慢体会一下),指针其实就是像整型一样的数据类型,它也可以被另一个指针指向;就是说k是指针的指针,k存放的是p那种int*类型的地址;
第一个输出是2不明白是吧?
首先你要明白p的含义,即p在当前语句中依然以p的初值进行计算,执行完当前这个语句后p才等于p1;
举个例子:n=2;a=1n;最后a=3;n=3;
所以printf(\"%d\",*(p));可以分开写成printf(\"%d\",*(p));p=p1;下面就分三步:
1.前面有p=a,所以p存放了数组a第一个元素的地址,所以*p就是2;
2.执行完上面那个语句后,p马上等于p1,所以这时p又指向了a数组中第二个元素;
3.前面有k=*k就等价于p;所以*(*k)就等价于*p了..第二步p指向了a数组中第二个元素,那*p是多少就不用我说了吧... |