C中的这个数组声明怎么可能?

穆斯坎卡拉
int arr[5]={1,2,3,4,5,6,7,8,9};

这种声明方式不会出错,并且数组一直存储到第 4 个索引,如果我尝试输出 arr[5] ,它将给出垃圾值。任何人都可以解释这种方式是如何可能的吗?

编辑:我试图在在线编译器中运行以下代码:

#include <stdio.h>
int main() {
    int arr[5]={1,2,3,4,5,6,7,8,9};
    int i;
    for(int i=0; i<6;i++){
        printf("arr[%d]=%d\n", i,arr[i]);
    }
    return 0;
}
0______

它将仅初始化数组的 5 个元素。其余的初始化程序将被忽略。编译器将发出诊断消息(警告)。

<source>:11:23: note: (near initialization for 'arr')
<source>:11:25: warning: excess elements in array initializer

这种声明方式不会出错,数组会一直存储到第 4 个索引

这是正确的 - 您需要阅读警告消息和注释。不要忽视警告!!

如果我尝试输出 arr[5] 它会给出垃圾值

您可以通过读取数组边界之外的内容来调用 Undefined Bahavour。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章