c语言+二维数组

标签 c multidimensional-array undefined-behavior

我有一个 C 代码。 我将数组索引指定为 12 的地方。但它允许我将数组更多地初始化为该索引,而不是给出索引超出范围的错误。 任何人都可以向我解释一下吗?

int vas1[12][12];
    vas1[15][15]=0;

    int i,j;
    for (i = 0; i < 15; i ++)
    {
        for (j = 0; j < 15; j ++) {
            printf("i=%d j=%d vas=%d",i,j,vas1[i][j]); 

        }
    }

printf("Success");

谢谢

最佳答案

C 不对数组访问进行边界检查。它只是将非法访问标记为“未定义行为”,因此每个实现都可以随心所欲。由于使用 C 意味着您知道自己在做什么,因此 C 允许您 shoot yourself in the foot .

在实践中,有时会出错,有时不会。有时您不会收到错误,但客户会收到。最坏的情况:您不会收到错误,但程序的行为真的很奇怪(变量无缘无故地更改值等)。

关于c语言+二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9359952/

相关文章:

c++ - 将指针设置为 NULL 会影响您指向的原始项目吗?

c - 构建 Linux 调试器 C

arrays - R通过重复矩阵​​来填充3D数组

java - 在二维数组中添加元素

c++ - 将 new[] 与 delete 配对怎么可能只导致内存泄漏?

c - (在哪里)clang 是否记录了实现定义的行为?

c++ - 我可以将二维数组视为连续的一维数组吗?

c - ARM 程序集 : Getting a string from STDIN

c - C 中结构中的 char 数组的 strcpy 问题

c# - 将多维字节数组保存到 SQL Server 数据库