2 bldwihc bldwihc 于 2016.01.14 04:11 提问

当指针'*'和自增"++"在一起的时候,如何执行?

例: int a[5]={11,22,33,44,55};
int p=a;
printf("%d\n",*p++);
printf("%d\n",
(p++));
上面"*p++" 和"*(p++)",都是一样的自右向左的优先级.但又怎么先取值,再加1?
不是先进行"++"后指针"*"吗?

4个回答

caozhy
caozhy   Ds   Rxr 2016.01.14 04:38
已采纳
 *p++; 不是 *p = *p + 1; 它却是 *p = *(p+1); 而且是后加加。
int a[5]={11,22,33,44,55};
int *p=a;
printf("%d\n",*p++); 输出 a[0]的值 11,后加加:表达式里先用原值,不自增。
出了上面打印语句再自增 *p = *(p+1); 
接着打印 printf("%d\n",*p); 打出 a[1]的值 22。
bldwihc
bldwihc 按照优先结合性,*++p ,它的值却是直接打印.它为什么不直接打印a[1]的值?
接近 2 年之前 回复
caozhy
caozhy   Ds   Rxr 2016.01.14 04:39

如果我的回答帮助了您,请及时采纳,方法是,点击我回答右边的蓝色采纳按钮。谢谢!

litpud
litpud   2016.01.14 07:02

为什么要写这样的代码?可阅读性好还是可维护性好?分开写,永远不会犯错。

enpterexpress
enpterexpress   2016.01.14 09:09

上面"*p++" 和"*(p++)",都是一样的自右向左的优先级.但又怎么先取值,再加1?
不是先进行"++"后指针"*"吗?
是这样的呀++位置不同导致p什么时候加1,然后再作指针运算

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!