示例:
int main(void)
{
int a[6]={1,2,3,4,5,6},x,y;
int *p,**k;
p=a;
k=&p;
x=*(p++);
y=**k;
printf("x=%d",x);
printf("y=%d\n",y);
}
上面输出的结果为x=1 y=2
p为指向数组a[6]数组名为a的指针,p指向数组的首地址,即p指向数组元素a[0]=1的地址。
k为指向指针p的地址的指针,即指向指针的指针。
*(p++) 先输出*p 然后p++,p=p+1影响**k.p++是表达式不变,变量加1,即p++=p=a[0],p=p+1=a[1],取到了第一个元素a[0]的值,很常用.
若是++p表示p=p+1,表示指针移动,不过这种移动是表达式++p和变量p同时加1,取不到第一个元素的值,所以语句中一般很少用.
若是++*p 表示变量加1,即先取指针p的指向元素1,再1+1=2,指针不动,指针所指变量加减.
int main(void)
{
int a[6]={1,0,3,4,5,6},x,y;
int *p,**k;
p=a;
k=&p;
x=++*p;
y=**k;
printf("x=%d",x);
printf("y=%d\n",y);
}
++*p:先*p,即a[0]=1,然后再++,最终为2——不改变指针,++数据
结果为x=2 y=2
这里啰嗦下优先级的问题:
++*p ++和*的优先级是一样的,不过它们计算时都是从右向左算的