我正在编写一个程序,其中我使用了一个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;
并删除第二部分时,我说得对。左。
我在这里错过了什么吗?
答案 0 :(得分:4)
您的数组是4乘4,但您将它视为5乘5。您的代码具有未定义的行为。您的循环应该只计算到i < 4
和j < 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阵列。