11

ポインターへのポインターを受け入れる関数に 2 次元配列を渡そうとしています。そして、2次元配列はポインターへのポインター(1次元配列へのポインター)ではないことを学びました。以下のコードをコンパイルすると、このエラーが発生しました。

#include<iostream>

void myFuntion(int **array)
{
}
int main()
{
   int array[][]= {{1,2,3,4},{5,6,7,8,9},{10,11,12,13}};
   myFuntion(array);
   return 0;
}

関数 'int main()' 内: 行 5: エラー: 多次元配列としての 'array' の宣言には、-Wfatal-errors により終了した最初のコンパイルを除くすべての次元の境界が必要です。

可能であれば、これといくつかのドキュメントに関する私の疑問を誰かが解決できますか?

4

6 に答える 6

7
  void myFunction(int arr[][4])

最初の [] には任意の数字を入れることができますが、コンパイラはそれを無視します。ベクトルをパラメーターとして渡す場合、最初の次元以外のすべての次元を指定する必要があります。

于 2012-10-20T20:59:54.920 に答える
1

「生の」配列の代わりにstd::vectorを使用しないのはなぜですか。利点:
1。動的に成長できます。
2.関数への引数の受け渡しに問題はありません。つまり、void myFuntion(int array [SIZE1] [SIZE2]);を呼び出そうとします。配列を使用すると、SIZE1とSIZE2ではなくいくつかの異なるサイズがあります

于 2012-10-20T17:02:42.077 に答える
1

少なくとも 2 番目の次元のサイズを指定する必要があります。

int array[][5] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8, 9 }, { 10, 11, 12, 13 } };

よく繰り返されるエラーもあります。2D 配列を引数として渡すには、次の型を使用する必要があります。

void myFuntion(int (*array)[SIZE2]);
/* or */
void myFuntion(int array[SIZE1][SIZE2]);
于 2012-10-20T16:59:33.693 に答える
0
#include<iostream>
 void myFuntion(int arr[3][4]);
int main()
  {
  int array[3][4]= {{1,2,3,4},{5,6,7,8},{10,11,12,13}};
 myFuntion(array);
  return 0;
 }
   void myFuntion(int arr[3][4])
   {

   }

http://liveworkspace.org/code/0ae51e7f931c39e4f54b1ca36441de4e

于 2012-10-20T17:02:55.300 に答える
0

多次元配列としての「配列」の宣言には、最初の次元を除くすべての次元の境界が必要です。

array[][size] //here you must to give size for 2nd or more 

function で配列を渡す場合、 array はポインターへのポインターではなく、配列へのポインターなので、次のように記述します

fun(int (*array)[])

ここで (*array) の括弧を忘れると、演算子の優先順位によりポインタの配列になります [] は * よりも優先されます

于 2012-10-20T17:10:03.523 に答える