2012-04-16 33 views
0

有人可以告诉我这里有什么问题吗?C中的多个暗淡阵列

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

看起来像数组大小应该是'[15] [2]'。 – trutheality 2012-04-16 04:25:10

+0

它应该是'int arr [15] [2]'。 – jweyrich 2012-04-16 04:25:16

回答

6

这里

int arr[15][1]; 

声明15X1元件(因此指数0-14用于第二维的第一维度和0-0),然后设置0和1元件的阵列的第二个维度。由于没有第二维的元素1,因此arr[x][1] = x;arr[x+1][0] = x;相同

基本上,数组是存储元素的连续内存。多维数组可以作为数组的数组:第二维表示第一维时间的大小。所以,当你overindex进行第二个维度,您正在访问的第一维的下一个元素

这也意味着arr[x][1] = x访问,这不是为数组分配时x==14

你最有可能意味着有两个元素内存在第二维中,声明数组为:

int arr[15][2]; 
+0

:-(比我快,+1 – Endophage 2012-04-16 04:26:19