#include<stdio.h>
int main()
{
int a[2]={10,4};
int *k;
int *j;
j=a;
k=j;
printf("j=%d,k=%d\n\n",*j,*k);
*j++;
++*k;
printf("j=%d,k=%d",*j,*k);
return 0;
}
输出是:
j=10 k=10
j=4 k=11
我认为它应该有相同的结果,但事实并非如此。
我想问一下是什么造成了这种差异。我不明白其背后的原因。
您需要挖掘运算符优先级表。
*p++
被评估为*(p++)
++*p
被评估为++(*p)
第二个是由于前缀++
与指针取消引用具有相同的优先级*
so 关联性(对于这些操作员来说是从右到左)开始发挥作用。
为了完整起见,*(p++)
取消引用当前值p
, and p
语句完成后加一。++(*p)
指向的数据加 1p
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)