例如:
int main()
{ int *p, a[5]={1, 3, 5, 7, 9};
p = a;
printf("%d", *p++);
}
有的人认为 *p++
的作用是先使p加1, 即指向第一个元素a[1]
处, 然后输出第1个元素a[0]
的值3.
其实不然,
由于++的优先级高于*因此先执行p++
, 而p++
的作用是先用p的原值进行运算(进行*p的运算) ,然后再使p加1.
结论是先输出a[0]的值,然后在使p加1. 如果是*(++p), 则先使p指向a[1],然后输出a[1]的值.
在使用++和--运算符时,一定要避免歧义性, 如无把握, 宁可多加括号.
如上面的*p++可改为*(p++).
以上内容:摘自C程序设计(第四版) -- p363
附加:
下面举个例子对比一下(*p)++
#include<stdio.h>
int main()
{
int a[5] = {1,2,3,4,5};
int *p = a;
(*p)++;
printf("%d\n", (*p)++);
return 0;
}
运行结果:2