-1

2 つの単純な関数があり、1 つの関数入力は NxM 配列にあり、N+2 と M+2 は含まれません。したがって、元の配列はゼロで囲まれている必要があり、他の出力は配列全体です。out 関数が呼び出されると、非常に奇妙な出力が得られます。

ここに画像の説明を入力

しかし、コードをメイン関数に移動すると、すべて問題ありません。このコードを CodeBlocks でコンパイルしてみましたが、NetBeans.Behaviour は同じです。そこで何が起こっているのかわかりません。誰か説明できますか?

.....
int main()
{
int array[N+2][M+2]={{0}};

local_in(N,M,array);
local_out(N,M,array);

return 0;
}

void local_in(int len, int len2,int arr[][len2])
{
   int i;
   int j;

   for(i = 1; i <= len; i++)
     for(j = 1; j <= len2; j++){
          scanf("%d",&arr[i][j]);

    } 

}
void local_out(int len, int len2,int arr[][len2])
{
   int i;
   int j;

  for(i = 0; i < len+2; i++){
    for(j = 0; j < len2+2; j++)
            printf("%d ",arr[i][j]);
    printf("\n");
  } 
}
4

1 に答える 1

4

関数local_*は配列を次のように渡しint arr[][len2]ます。int arr[][len2+2]代わりに使用する必要があります。

一般に、正しい配列次元を渡し、関数内で読み書きするアイテムに関するポリシーを実装すると、コードはより明確になりlocal_*ます。

于 2013-01-30T14:22:13.990 に答える