微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在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 举报,一经查实,本站将立刻删除。