2016-07-05 10 views
-4

2次元配列を関数に渡して印刷するのが好きです。 ここまでは私のコードです。コメントに表示されるように、互換性のないタイプののためにコンパイルされません。C++ 2次元配列を関数に渡します

QUESTION

にはどうすれprintItに2次元配列を渡すことができますか? 私はprintIt(int a(*)[50][50])に調整した場合returning array is not allowed

using namespace std; 

void printIt(int a[50][50]); 

int main(int args, char *argv[]) 
{ 
    int a[50][50]; 
    int j = 0; 
    for (int i = 1; i < 6; i++) 
    { 
     a[i][j] = i; 
     // the same should be printed out inside printIt 
     cout << " " << a[i][j]; 
     // not compiling 
     // argument of type int is incompatible with int(*)[50] 
     printIt(a[i][j]); 
    } 
} 

void printIt(int a[50][50]) 
{ 
    cout << " " << a[50][50]; 
} 
+3

'printIt(a);'と 'a [50] [50]; 'は境界外の配列にアクセスしています。私はあなたのコードで何をしているのか分からない。だから実際に何を達成したいのですか? –

+1

_ "メモリの場所" _ではなく、ゴミ値が表示されます。 –

+0

[50] [50]を実行すると、結果は7862380になります。 これはちょっとしたことです。私は二次元配列で遊んで結果を印刷しました。だから私は、別の関数にどのようにそれを抽出することができますが、それは私が詰まっているところです。 – xhallix

答えて

1

は整数でa[i][j]ので、それが値であるので、私は、コンパイル時に別のエラーが発生します。あなたは、あなたのコードはそのようになっているはずの値でないdouble配列を渡す:

int a[50][50]; 

a[i][j]考える

#include <iostream> 
using namespace std; 

void printIt(int a) 
{ 
    cout << " " << a; 
} 

int main(int args, char *argv[]) 
{ 
    int a[50][50]; 
    int j = 0; 
    for (int i = 1; i < 6; i++) 
    { 
     a[i][j] = i; 
     // the same should be printed out inside printIt 
     cout << " " << a[i][j]; 
     // not compiling 
     // argument of type int is incompatible with int(*)[50] 
     printIt(a[i][j]); 
    } 
} 
+0

ああ、私は、これは配列ではありませんが、私はこの例では通常の整数を渡していません。ありがとう! – xhallix

+0

という名前の2D配列があるためです。 'printInt()'のためのパラメータで渡しているものは、 'a [i] [j]'の位置にある整数です。あなたは配列を渡していませんが、値 – Hearner

+0

がありがとうございます。受け入れるでしょうが、〜5分以上行くのです – xhallix

3

intに評価されます。

a[i]は、50の整数の配列int [50]と評価されます。関数呼び出しの引数として使用された場合、a[i]はほとんどの場合int*に減衰します。まれに、int (&)[50]に変換されます。

関数呼び出しの引数として使用される場合、aはほとんどの場合、int (*)[50]に減衰します。まれに、int (&)[50][50]に変換されます。あなたのケースで

、関数宣言

void printIt(int a[50][50]); 

printIt(a); 
012を使用して、

void printIt(int a[][50]); 

したがって
void printIt(int (*a)[50]); 

と等価です

は、関数を呼び出す正しい方法です。

しかし

あなたはprintItで引数を使用している方法を考えると、あなたはおそらく使用することを意図し

その後
void printIt(int num) 
{ 
    cout << " " << num; 
} 

、使用することをOK:

printIt(a[i][j]); 

mainにあります。

+0

この説明のためにたくさんありがとう)) – xhallix