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;
}

回答

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

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

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

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

  • 该标准要求对约束违规进行诊断。

以上是C中的这个数组声明怎么可能?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>