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

时间:2019-10-18 03:22:01

标签: c99

我想知道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;
}

2 个答案:

答案 0 :(得分:0)

  

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"

答案 1 :(得分:0)

  

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

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

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