指针的指针

示例:

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 ++和*的优先级是一样的,不过它们计算时都是从右向左算的

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值