-2

二次元配列の値を一次元配列に入れる実験をしているところです。以下は私のコードと結果です:

#include <iostream>
using namespace std;

int main()
{
int p[1][1];
int arrayA[4];

for(int i=0;i<2;i++){
    for(int j=0;j<2;j++)
    {
        p[i][j] = i+j;
    }
}
int *a = &(p[0][0]);
for(int k=0;k<4;k++)
{
    arrayA[k] = *a;
    cout << "*a:  " << *a << endl ;
    cout << "array[k] :" << arrayA[k] << endl;
    cout << "a:   " << a << endl;
    cout << "---------------------------" << endl;
    a++;
}
system("PAUSE");    
    }

結果は次のとおりです。 ここに画像の説明を入力

しかし、p 1 [0]の値を逃した理由がわかりません。この値は 1 である必要があります。2 次元配列の最後の数値を 1 次元配列に入れることはできますが、前の数値を入れることはできないので、これは奇妙です。

だから誰かが私のコードや私の考え方に何が起こったのか教えてくれることを願っています. ありがとうございました。

4

3 に答える 3

3

これにより、 array が範囲外になりますp

int p[1][1];
int arrayA[4];

for(int i=0;i<2;i++){
    for(int j=0;j<2;j++)
    {
        p[i][j] = i+j;
    }
}

配列のインデックスは から0まで実行されますN - 1。ここNで、 は配列のサイズです。

于 2012-04-29T20:11:08.180 に答える
1

問題はあなたが書いたことです:

int p[1][1];

C および C++ では、次元の要素の数は、ベクトルまたは行列が持つべき真の数であることに注意してください。ただし、それらのインデックスは 0 から n-1 まで実行されます (n は入力した数値です)。したがって、 p の宣言は次のようになります。

int p[2][2];

代わりは。お役に立てれば。

于 2012-04-29T20:11:37.150 に答える
0

あなたが書いint p[1][1]たが、私はあなたが意味したと思いますint p[2][2].

于 2012-04-29T20:12:08.357 に答える