赞
踩
*
和++
的优先级一样,但结合律是从右往左,即:对于*++p
,是先运算++p
,也就是指针先递增后指向,再运算*
;对于*p++
,根据从右往左运算,应该先运算p++
,也就是指针先指向后递增,再*
运算 。
int main()
{
int *p;
int buf[4]={1,2,3,4};
p=buf;
printf(" *p=%d \n",*p);
printf(" *p++=%d\n",*p++);//p先指向位置的值 后 递增指针,所输出为:1;指针递增后,p指向位置的值为2
printf(" *++p=%d\n",*++p);//++p先执行,即p先递增后指向,所以p递增后指向的位置是buf[2],再解引用输出为:3
// printf(" *p=%d\n",*p);
return 0;
}
控制台输出:
*(++p)
和*(p++)
,与上面运算等价,也就是加不加括号都一样。
(*p)++
是先对p解引用,即取出该地址上的值,然后对该值进行递增。
int arr[3]={1,9,22};
int *p=arr;
printf("%d",(*p)++);//*p=1,再对值递增,所以输出为:2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。