Cout 打印了不正确的二维 int 数组值,而代码似乎是正确的

Cout prints incorrect values of Bidimensional int array, while code appears to be correct

提问人:empleat 提问时间:7/1/2021 最后编辑:empleat 更新时间:7/13/2021 访问量:29

问:

以下代码看似正确,但它会打印不正确的数字,每次都是随机的!我从字面上从 C++ 站点复制了它并交叉检查以确认代码正确!它仍然不起作用!

#include <iostream>

int main()
{
    int a[3][4] = {
       {0, 1, 2, 3} ,   /*  initializers for row indexed by 0 */
       {4, 5, 6, 7} ,   /*  initializers for row indexed by 1 */
       {8, 9, 10, 11}   /*  initializers for row indexed by 2 */
    };
    std::cout << a[3][4];
}
数组 visual-studio visual-studio-2019 警告

评论


答:

1赞 Josh 7/1/2021 #1

当你在 c++ 中初始化数组时,传递到每个括号中的数字是数组的大小,但这是上限,它实际上不是索引,而是限制。如果您的索引从 0 开始,并且您在 arrray 中有 3 个项目,那么最后一行将是 2。这就是为什么数组上的 c++ 循环总是

for(int i =0; i < array_size; i++)

强调 on 而不是 .
在代码中,将项目越界索引;因为 a[3][4] 在技术上是第 4 列第 5 行。
C++ 会让你越界索引,而你实际上只是在内存中索引随机值,这并不好。
尝试打印,这应该是您所期望的。
<<=a[2][3]

评论

0赞 empleat 7/1/2021
问题是我已经尝试过了,我得到:C2078 太多的初始值设定项,3x E0146 太多的初始化值。我不知道这是怎么回事!!奇怪!他们和我一样:geeksforgeeks.org/multidimensional-arrays-c-cpp
0赞 Josh 7/2/2021
你到底尝试了什么?我刚刚运行了您的代码,与您发布时完全复制粘贴,除了 ,并且它工作正常,打印.std::cout << a[2][3];11
0赞 empleat 7/3/2021
你说的:用a[3][4]代替a[2][3]。
0赞 Josh 7/3/2021
如果你放,那么它应该可以工作......正如我所说,我复制粘贴了您的确切代码,当我在最后一行替换为时,它工作正常。你的第一行应该是 ,只有最后一行应该是std::cout << a[2][3];a[3][4]a[2][3]a[3][4]a[2][3]
0赞 empleat 7/5/2021
然后我不明白,我为此创建了一个新项目,并从那里复制了代码,但它仍然不起作用......虽然代码是正确的!但是,如果我创建另一个项目:它现在可以工作了,嗯......