0

誰かがここで何が悪いのか教えてもらえますか?

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
4

1 に答える 1

6

ここ

int  arr[15][1];

15x1要素の配列を宣言し(つまり、最初の次元のインデックスは0〜14、2番目の次元のインデックスは0〜0)、2番目の次元の0要素と1要素を設定します。二次元の要素1がないのでarr[x][1] = x;、と同じですarr[x+1][0] = x;

基本的に、配列は要素を格納するための連続したメモリです。多次元配列は、配列の配列と考えることができます。2番目の次元は、最初の次元の時間のサイズで表されます。したがって、2番目のディメンションのインデックスをオーバーインデックスすると、最初のディメンションの次の要素にアクセスすることになります。

arr[x][1] = xこれは、次の場合にアレイに割り当てられなかったメモリにアクセスすることも意味します。x==14

2番目の次元に2つの要素があることを意図している可能性が高いため、配列を次のように宣言します。

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