提问人:Machani Omesh 提问时间:10/29/2023 最后编辑:Yusuf BouzekriMachani Omesh 更新时间:10/29/2023 访问量:62
我不明白为什么我会得到这样的输出:了解数组
I am Not understanding why im getting output like this : Understanding Arrays
问:
当我在 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;
}
我想知道数组中大括号的确切使用,为什么它会改变它的输出值。
答:
1赞
pmacfarlane
10/29/2023
#1
在您的第一个示例中,您有以下内容:
int b=(20,30,400);
(20, 30, 40)
是使用逗号运算符(两次)的表达式。逗号运算符计算左侧的表达式,然后计算右侧的表达式,并在右侧计算表达式的值。因此,“计算”和 、 和 的值为 。这就是第一个代码片段打印 .(20,30,400)
20
30
400
400
400
您的第二个代码片段对我来说似乎不是有效的 C 代码。它在 gcc 中编译警告,即使使用 ,所以也许我遗漏了一些东西。我在 6.7.10.12 的当前 C23 标准草案中可以找到的最好的是:-pedantic
标量的初始值设定项应为单个表达式,可选择用大括号括起来,或者应为空初始值设定项
所以我想说大括号是可以的,但你不能有多个表情。
评论
(20,30,400)
这不是数组。结果为 400 的简单表达式,
int b[] = {20, 30, 400};
printf("%d", b);
warning: excess elements in scalar initializer