我不明白为什么我会得到这样的输出:了解数组

I am Not understanding why im getting output like this : Understanding Arrays

提问人:Machani Omesh 提问时间:10/29/2023 最后编辑:Yusuf BouzekriMachani Omesh 更新时间:10/29/2023 访问量:62

问:

当我在 C 编程语言中声明了一些多个随机 int 变量时。

案例 1 :当我运行指定圆括号的代码而不正确声明数组时,我得到的输出是 .这是其中的最后一个值。int b=(20,30,400);400

#include <stdio.h>

int main() {
   
    int b=(20,30,400);

    printf("%d",b);

    return 0;
}

案例 2 : 当我运行指定大括号的代码而不正确声明数组时,我得到的输出是 .这是其中的第一个值。int b={20,30,400};20

#include <stdio.h>

int main() {
   
    int b={20,30,400};

    printf("%d",b);

    return 0;
}

我想知道数组中大括号的确切使用,为什么它会改变它的输出值。

数组 C 窗口 括号 大括号

评论

3赞 RbMm 10/29/2023
(20,30,400)这不是数组。结果为 400 的简单表达式,
1赞 pmacfarlane 10/29/2023
看看这个:逗号运算符 是做什么的?
0赞 pmacfarlane 10/29/2023
编译第二个代码片段时是否收到任何警告?他们会告诉你出了什么问题吗?
1赞 Weather Vane 10/29/2023
案例 2 存在语法错误,因此不会运行可执行文件。如果需要多个值,可以使用数组,但您没有数组。它必须是 ,但那样将是不正确的。int b[] = {20, 30, 400};printf("%d", b);
1赞 pmacfarlane 10/29/2023
@WeatherVane 我最初认为(并这样评论)片段 2 不会编译,但 gcc 编译它并发出警告。warning: excess elements in scalar initializer

答:

1赞 pmacfarlane 10/29/2023 #1

在您的第一个示例中,您有以下内容:

    int b=(20,30,400);

(20, 30, 40)是使用逗号运算符(两次)的表达式。逗号运算符计算左侧的表达式,然后计算右侧的表达式,并在右侧计算表达式的值。因此,“计算”和 、 和 的值为 。这就是第一个代码片段打印 .(20,30,400)2030400400400

您的第二个代码片段对我来说似乎不是有效的 C 代码。它在 gcc 中编译警告,即使使用 ,所以也许我遗漏了一些东西。我在 6.7.10.12 的当前 C23 标准草案中可以找到的最好的是:-pedantic

标量的初始值设定项应为单个表达式,可选择用大括号括起来,或者应为空初始值设定项

所以我想说大括号是可以的,但你不能有多个表情。