在C编程中,为什么方括号在语句中获得比前缀运算符++更高的优先级:“a[i] = ++i;”?

问题描述

我通过基于 gcc 的 C 编译器运行了以下代码

int main() {
    int i = 0;                              // Line 1
    static int a[10];                       // Line 2
    
    a[i] = ++i;                             // Line 3
    
    printf("%d %d",a[0],a[1]);            // Line 4
    
    return 0;                               // Line 5
}

根据教科书《The C Programming Language by Brian Kernighan and Dennis Ritchie》和网站:https://en.cppreference.com/w/c/language/operator_precedence中提供的优先级表:方括号(数组下标运算符)的优先级高于prefix运算符++。

在运行程序时,我收到的输出是:a[1] = 1。

我不明白为什么操作顺序不是如下:

  1. a[0] (把 i = 0)
  2. ++i (将 i 增加 1)
  3. a[0] = 1 (将 i 的值赋给 a[0])

而是作为

  1. ++i (将 i 增加 1)
  2. a[1] (把 i = 1)
  3. a[1] = 1 (将 i 的值赋给 a[1])

打破优先规则。请帮助我知道我哪里出错了。

解决方法

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

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

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