在此代码中:

#include <stdio.h>

int main(void) 
{
    int a[2][3] = {{1,2},{4,5,6}};

    printf("%d\n",a[0][2]);
    return 0;
}

输出为0-由于数组未初始化,此输出是否是某些未定义行为的结果?

推荐答案

来自C标准(6.7.9初始化)

19初始化应按初始化器列表顺序进行,每个

10如果具有自动存储持续时间的对象未初始化

-如果它有算术类型,则初始化为(正数或正数)

所以实际上这个宣言

int a[2][3] = {{1,2},{4,5,6}};

相当于

int a[2][3] = {{1,2, 0},{4,5,6}};

C++相关问答推荐

如何将FileFilter添加到FileDialog GTK 4

LibpCap禁用监视器模式(C、MacOS)

Linux不想运行编译后的文件

RawMotion的XInput2错误(具有较高值的XISelectEvents上的BadValue)

Caesar密码调试:输出文本末尾的问号和随机字符

为什么GCC-O1优化破解了这个代码,为了一个GameBoy高级只读存储器而修改了VRAM的循环?

C-try 将整数和 struct 数组存储到二进制文件中

如何对现有的双向循环链表进行排序?

生成一个半RNG,结果用C表示(无随机/随机)

哪个首选包含第三个库S头文件?#INCLUDE;文件名或#INCLUDE<;文件名&>?

意外的C并集结果

Matlab/Octave对conv2函数使用哪种方法?

不兼容的整数到指针转换传递';char';到类型';常量字符*

C 和 C++ 标准如何告诉您如何处理它们未涵盖的情况?

使用 _Atomic float 时,MSVC 编译的代码会命中调试断言

GDB 用内容初始化数组

为什么实现文件中的自由函数默认没有内部链接?

C 中类型说明符的顺序重要吗?

我该如何处理这个 C 90 代码中的内存泄漏?

为什么转换为 uint64_t 会改变此代码中的结果?