2D数组的行和列是否从0开始?

时间:2015-06-27 01:10:20

标签: c++ arrays

int myarray[7][7]是否在C ++中没有创建一个包含0到7行和列的8x8位置的框?

当我跑步时:

int board[7][7] = {0};

for (int i = 0; i < 8; i++)
{
    for (int j = 0; j < 8; j++) 
    {       
        cout << board[i][j] << " ";
    }
    cout << endl;
}   

我得到输出:

0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 146858616 1 0 0 146858832 1 1978920048 

所以8列似乎工作,但不是8行。 如果我将其更改为int board[8][7] = {0};它适用于mac CodeRunner IDE,但在linux Codeblocks上我得到:

0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 1 0 0 0 0 0 1503452472

不确定这里发生了什么。

5 个答案:

答案 0 :(得分:2)

在这方面,二维数组与一维数组没有区别:正如

int a[7];

可以从0到6进行索引,

int a2[7][7];

可以在两个维度中从0到6建立索引,索引7超出范围。特别是:a2有7列和7行,而不是8行。

答案 1 :(得分:1)

int board[7][7];只会分配7x7,而不是8x8。分配时,指定了多少,但索引从0开始并运行到大小-1。

因此,根据您的来源,我会说您真的想要int board[8][8]

答案 2 :(得分:1)

int board[7][7] = {0};创建一个7x7数组。你在循环中走出界限。将其更改为int board[8][8] = {0};

答案 3 :(得分:1)

int board[8][7]  = {0};

如上所述,您只创建了8行和7列。

所以你的循环条件应该如下:

for (int i = 0; i < 8; i++)
{
    for (int j = 0; j < 7; j++) 
    {     

如果您尝试以下操作,系统将从第8列打印垃圾值

for (int i = 0; i < 8; i++)
{
    for (int j = 0; j < 8; j++) 
    {      

答案 4 :(得分:0)

Araay从零开始意味着它将具有n-1个元素而不是n + 1个元素 尝试

int a[8][8] = {}
i = 0
j = 0
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
a[i][j] = 0;
}
}