Jau*_*une 4 c initialization list-initialization
看下面的代码:
int arr[4];
for (int index = 0; index < 4; ++index) {
printf("%d\t", arr[index]);
}
Run Code Online (Sandbox Code Playgroud)
它打印随机值,如下所示:
27224 -6784 32766 0
Run Code Online (Sandbox Code Playgroud)
但是当我设置arr为 时{},它会打印零。
27224 -6784 32766 0
Run Code Online (Sandbox Code Playgroud)
0 0 0 0
Run Code Online (Sandbox Code Playgroud)
为什么?
默认情况下,数组元素未初始化,这意味着它们将包含垃圾值:
int arr[4];
Run Code Online (Sandbox Code Playgroud)
使用花括号初始值设定项,您可以显式设置初始值,例如
int arr[4] = {1, 2, 3, 4};
Run Code Online (Sandbox Code Playgroud)
但是如果大括号中的数字数量小于数组的长度,则其余部分用零填充。这就是在这种情况下发生的事情:
int arr[4] = {};
Run Code Online (Sandbox Code Playgroud)
请注意,这在 C 中无效,仅在 C++ 中有效,但您的编译器显然允许它。在标准 C 中,您必须至少编写一个值:
int arr[4] = {0};
Run Code Online (Sandbox Code Playgroud)
当我在编译器(gcc 9.3)中尝试你的代码时,它给出了以下警告:
prog_c.c:14:12: warning: ISO C forbids empty initializer braces [-Wpedantic]
14 | int arr[4]={};
Run Code Online (Sandbox Code Playgroud)
我认为它认为这相当于int arr[4]={a_single_value};
但没有这个单一值(这是不正确的)。
当您提供的初始值少于数组中元素总数时,语言会认为缺失的元素设置为零。
在您错误的情况下,我猜编译器对所有元素应用相同的规则。
您的{}初始化被视为数组的部分初始化。
| 归档时间: |
|
| 查看次数: |
949 次 |
| 最近记录: |