2012-04-29 29 views
-2

2次元配列の値を1次元配列に配置する実験を行っています。以下は私のコードと結果である:2次元配列から1次元配列へ

#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");  
    } 

と結果は次のとおりです。 enter image description here

しかし、私は1しかし、その代わりになるべき値は、[0]これは、p 1の値を逃した理由はわかりません、私はそれがどこから来たか奇妙な番号を得た。これは二次元配列の最後の数字を一次元配列に置くことができますが、前の数字は入れないということは私には変です。

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

+3

スクリーンショットを投稿して実際のテキスト出力を投稿しないでください。読みやすく、コピー&ペーストが簡単です。 –

答えて

3

これはアレイp上の範囲外になる:Nが配列のサイズであるN - 10から実行アレイ上

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; 
    } 
} 

インデックスを、。

1

問題は、あなたが書いたということです。

int p[1][1]; 

はCであり、C++で、寸法のための要素の数はあなたが持っている、ベクトルや行列を意味し、真数であることを忘れないでくださいただし、インデックスは0からn-1(nは書き込んだ番号)で実行されます。したがって、pの宣言は、

int p[2][2]; 

とする必要があります。 これが役立つことを願っています。

0

あなたはint p[1][1]を書きましたが、あなたはint p[2][2]を意味すると思います。