【问题标题】:What does a[3] = (a[1], a[2]); mean?a[3] = (a[1], a[2]); 是什么意思?意思是?
【发布时间】:2020-02-15 00:24:03
【问题描述】:

我想知道a[3] = (a[1], a[2]); 在下面的代码中做了什么。它返回a[3] = 0。如果我去掉括号,a[3] = a[1]a[2] 不会改变它的值。 谢谢!

#include <stdio.h>

int main(int argc, char ** argv) {
    int a[4] = { 100, 200 }; 
    a[3] = (a[1], a[2]); // What happens here?
    printf("%d %d %d %d\n", a[0], a[1], a[2], a[3]);

    return 0;
}

【问题讨论】:

  • a[3] 没有改变它的值,它在初始化时被赋予了0
  • 我以前没有见过这样的表达式...显然 a[3] 不是元组或集合,那么这里括号的功能是什么?谢谢!
  • a[3] 分配给括号中的最后一个未使用的第一个值是 0,因为 a[2] 是 0

标签: c99


【解决方案1】:

a[3] = (a[1], a[2]); // 这里发生了什么?

当表达式用逗号分隔时,返回最后一个。

int a = (1, 2, 3);
// a = 3

【讨论】:

    【解决方案2】:

    a[3] = (a[1], a[2]); 是什么意思?

    您将使用逗号运算符的表达式的结果分配给a[3]

    在调试器中试试这个例子,发生的事情会变得更清楚

    #include <stdio.h>
    
    int main(){
       int a[10] = { 100, 200 ,-10,-20,-30 }; 
       a[3] = ( a[1]++,a[3]++,a[4]++ );
       printf("%d %d %d %d\n", a[0], a[1], a[2], a[3]);
    }
    

    表达式的第一部分被执行,但在你的例子中 a[1] 被忽略,在这个例子中它被递增,然后 a[3] 被分配到括号中的最后一个值 a[4]

    See more in this answer to "How does the Comma Operator work"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 2021-12-24
      • 2015-01-03
      • 2017-05-09
      相关资源
      最近更新 更多