问题描述
根据C,PostIncrement(a++) > 取消引用(*) > 赋值(=) 当我在下面的 c 代码段中执行此操作时,
#include <stdio.h>
int main(){
int arr[]= {1,2,3};
int *p = a;
*p++ = 3;
for(int i=0;i<3;i++){
printf("%d ",arr[i]);
}
}
输出: 3 2 3
但是如果我们在这个语句中应用优先顺序,
*p++ = 3;
该语句将按以下顺序进行评估:
- p++ 将被评估
- *p 将被取消引用。
- 然后将使用赋值运算符将 3 分配给 *p
如果我们应用上述顺序, p 指向数组 arr 的开头,将首先递增并指向数组的第二个元素。然后第二个元素的地址将被取消引用,然后 3 将被分配给第二个索引。所以我们的预期输出应该是 1 3 3 但是我得到的输出是 3 2 3。
我知道我的预期输出不正确。如果您在这里解释编译器输出的计算顺序,将会很有帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)