cpp 2D数组本身有变化吗?

时间:2018-03-28 14:34:36

标签: c++ multidimensional-array

在下面的代码中,我创建了一个2D数组,tab。让len_a=5,len_b=4在第一个for循环之后,tab[0][5]应该等于5,它就是。但是,当我打印行时,它将值更改为1.发生了什么?

int len_a=a.length(),len_b=b.length();

    int tab[len_a+1][len_b+1];
    tab[0][0]=0;


    for(int i=1;i<=len_a;i++)//Init first row
        tab[0][i]=i;

    cout<<tab[0][5]<<endl;


    for(int j=1;j<=len_b;j++)//Init first column
        tab[j][0]=j;

    for(int i=0;i<=len_a;i++)//Print row
        cout<<tab[0][i]<<" | "<<i<<endl;

    cout<<endl;
    for(int i=0;i<=len_b;i++)
        cout<<tab[i][0]<<" | "<<i<<endl;    

输出:

5(第一次cout&lt;&lt;&lt; tab [0] [5])

0 | 0

1 | 1

2 | 2

3 | 3

4 | 4

1 | 5(第二个cout&lt;&lt; tab [0] [5] ???)

0 | 0

1 | 1

2 | 2

3 | 3

4 | 4

1 个答案:

答案 0 :(得分:0)

C ++有0个索引数组,这意味着第一个元素是0,最后一个是N-1。

示例:

tab[2][3]; //creating array

tab[0][0]; //first element of array
tab[0][1];
tab[0][2]; //last element in the first row
tab[1][0];
tab[1][1];
tab[1][2]; //last element in the second row and last element in array

上面未提及的任何其他元素,如tab[2][...]tab[...][3]都在声明的bounds数组之外。

由于在示例中创建了tab[6][5]cout << tab[0][5];正在访问超出tab范围的内容。由于@Bob__提到数组分配连续内存,因此访问tab[0][5]实际上访问tab[1][0]tab[1][0]元素的第二次访问是在//Init first column发生之后覆盖tab[1][0]元素中的值。

顺便说一句: 在示例中,第一个支架交换为秒。应该有:

int tab[len_a][len_b];

for(int i=0; i<=len_a; i++)//Init first row
    tab[i][0]=i; //not tab[0][i]