简体   繁体   中英

Does row and column of 2D arrays start at 0?

Does int myarray[7][7] not create a box with 8x8 locations of 0-7 rows and columns in C++?

When I run:

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;
}   

I get output:

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 

So the 8 columns seem to work, but not the 8 rows. If I change it to int board[8][7] = {0}; it works on mac CodeRunner IDE, but on linux Codeblocks I get:

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

Not sure what's going on here.

Two dimensional arrays are not different to the one dimensional ones in this regard: Just as

int a[7];

can be indexed from 0 to 6,

int a2[7][7];

can be indexed from 0 to 6 in both dimensions, index 7 is out of bounds. In particular: a2 has 7 columns and rows, not 8.

int board[7][7]; will only allocate 7x7, not 8x8. When it's allocated, you specify how many, but indexes start at 0 and run to the size - 1.

So based on your source, I would say you really want int board[8][8] .

int board[7][7] = {0}; creates a 7x7 array. You are going out of bounds in your loop. Change it to int board[8][8] = {0};

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

When you do as above, you created only 8 rows and 7 columns.

So your loop condition should be as follows:

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

If you try as follows system will print garbage values from 8th columns

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

Araay starts from zero means that it will have n-1 elements not n+1 elements try

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM