C中的多暗阵列

时间:2012-04-16 04:21:06

标签: 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]);
  }
}

它给我下面的输出,我无法弄清楚什么是错的,而[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

1 个答案:

答案 0 :(得分: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];