提问人:empleat 提问时间:7/1/2021 最后编辑:empleat 更新时间:7/13/2021 访问量:29
Cout 打印了不正确的二维 int 数组值,而代码似乎是正确的
Cout prints incorrect values of Bidimensional int array, while code appears to be correct
问:
以下代码看似正确,但它会打印不正确的数字,每次都是随机的!我从字面上从 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];
}
答:
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
然后我不明白,我为此创建了一个新项目,并从那里复制了代码,但它仍然不起作用......虽然代码是正确的!但是,如果我创建另一个项目:它现在可以工作了,嗯......
评论