有人可以告诉我这里有什么问题吗?
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
答案 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];