C 运算符中的求值顺序

问题描述

根据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;

该语句将按以下顺序进行评估:

  1. p++ 将被评估
  2. *p 将被取消引用。
  3. 然后将使用赋值运算符将 3 分配给 *p

如果我们应用上述顺序, p 指向数组 arr 的开头,将首先递增并指向数组的第二个元素。然后第二个元素的地址将被取消引用,然后 3 将被分配给第二个索引。所以我们的预期输出应该是 1 3 3 但是我得到的输出是 3 2 3。

我知道我的预期输出不正确。如果您在这里解释编译器输出的计算顺序,将会很有帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)