C中的多暗阵列

Bag*_*Dev 0 c arrays

有人可以告诉我这里有什么问题吗?

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]);
  }
}
Run Code Online (Sandbox Code Playgroud)

它给了我下面的输出,我无法弄清楚什么是错的,而[0] [0]和[0] [1]的输出应该是0,0等等其余部分?

[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
Run Code Online (Sandbox Code Playgroud)

Att*_*ila 6

这里

int  arr[15][1];
Run Code Online (Sandbox Code Playgroud)

你声明一个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];
Run Code Online (Sandbox Code Playgroud)