在c ++中使用数组时出现奇怪的错误

时间:2013-08-24 13:40:24

标签: c++ arrays

我正在编写一个程序,其中我使用了一个5x5阵列,我实际上想出了一个bug。
为了找到它,我尝试简化程序,然后编写另一个程序,其中我只想用数组显示数字1到25。

#include <iostream>
#include <conio.h>
using namespace std;
main()
{
long int a[4][4];
int m=1;
for(int i=0;i<5;i++)
{for(int j=0;j<5;j++)
{a[i][j]=m;

m=m+1;
}
}

for(int i=0;i<5;i++)
{for(int j=0;j<5;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
getch();
}

我真正得到的是:

1  2  3  4  6
6  7  8  9  11
11 12 13 14 16
16 17 18 19 21
21 22 23 24 25

然而,当我尝试不同的事情并在cout<<a[i][j];后放a[i][j]=m;并删除第二部分时,我说得对。左。 我在这里错过了什么吗?

3 个答案:

答案 0 :(得分:4)

您的数组是4乘4,但您将它视为5乘5。您的代码具有未定义的行为。您的循环应该只计算到i < 4j < 4,或者您需要将数组声明为long int a[5][5];

顺便说一下,main应该有一个返回类型,它应该是int。其他任何事情都是非标准的。

答案 1 :(得分:1)

当你声明[4] [4]时,它实际上是在创建一个4X4矩阵,它是一个矩阵,最多可以包含16个值,方括号中的数字是提到数组的大小。 大小以人类计数为1,2,3,4 ...并且程序开始存储输入的索引值从0开始。 所以从这里你可以得出结论

a [1](我们看到或想到的)对于计算机是[0]

a [2](我们看到或想到的)对于计算机是[1]

a [3](我们所看到或想到的)对于计算机是[2]

依旧......

代码更改

    a[4][4]

    a[5][5]

答案 2 :(得分:0)

long int a[4][4];

这是一个4x4阵列。