0

Can somebody please tell me what is wrong here?

int arr[15][1];
int main()
{
  int x;
  for(x=0; x<15; x++)
  {
    arr[x][0] = x;   
    arr[x][1] = x;    
  }  
  int y;
  for(y=0; y<15; y++)
  {
    printf("[%d][0]=%u\t", y, arr[y][0]);
    printf("[%d][1]=%u\n", y, arr[y][1]);
  }
}

it gives me the below output, I can't figure out what's wrong, while the output for [0][0] and [0][1] should be 0, 0 and so on for the rest?

[0][0]=0                [0][1]=1
[1][0]=1                [1][1]=2
[2][0]=2                [2][1]=3
[3][0]=3                [3][1]=4
[4][0]=4                [4][1]=5
[5][0]=5                [5][1]=6
[6][0]=6                [6][1]=7
[7][0]=7                [7][1]=8
[8][0]=8                [8][1]=9
[9][0]=9                [9][1]=10
[10][0]=10              [10][1]=11
[11][0]=11              [11][1]=12
[12][0]=12              [12][1]=13
[13][0]=13              [13][1]=14
[14][0]=14              [14][1]=14
4

1 回答 1

6

这里

int  arr[15][1];

您声明一个 15x1 元素的数组(因此第一个维度的索引为 0-14,第二个维度的索引为 0-0),然后设置第二个维度的 0 和 1 元素。由于没有第二维的元素 1,arr[x][1] = x;因此与arr[x+1][0] = x;

基本上,数组是存储元素的连续内存。多维数组可以看作是数组的数组:第二维是第一维时间的大小。因此,当您过度索引第二个维度时,您正在访问第一个维度的下一个元素

这也意味着arr[x][1] = x访问未为数组分配的内存时x==14

您很可能打算在第二维中有两个元素,因此将数组声明为:

int arr[15][2];
于 2012-04-16T04:25:41.403 回答