8

だから私はいくつかの質問があります。まず、3D配列を関数に渡すにはどうすればよいですか。関数はループを実行して配列の内容をファイルに出力するため、配列全体を渡す必要があります。これは私が現在持っているものです

int array[5][3][3]
void function(int a[5][3][3])
{
//...
}
void function(array); //or void function(array[5][3][3]);

配列へのポインターを使用してそれを機能させる方法を見つけましたが、先生に尋ねたところ、彼は私たちにポインターを使用することを望んでいません。

2番目の質問は、関数内のグローバル変数を変更する予定がある場合、それを関数に渡す必要はないということです。main内と同じように、関数内で使用できますか?

私が今抱えているさらに別の問題は、配列から関数に単一の値を渡すことです。

ループでは、配列[i] [j] [2](iとjは外部ループと内部ループのインデックス)から値を取得し、それを関数に渡して、90より大きいかどうかを評価する必要があります。 。これは学校の課題用ですので、私が満たさなければならない特定の仕様があることを理解してください。(ポインターを使用せず、配列全体を渡し、配列から1つの値を渡すのと同じように、クラスとしてポインターの使用方法をまだ学習していないため)

4

3 に答える 3

10

あなたのコードは正しいですが、実際にはC ++(またはC)の配列パラメーターのようなものはありません。コンパイラはサイレントにコードを同等のポインタ型に変換します。

int array[5][3][3];

void function(int (*a)[3][3])
{
    ...
}

したがって、教授はポインタを使用しないように指示しましたが、C ++には配列型パラメータなどが実際にはないため、実際にはポインタを回避することはできません。

2番目の質問ですが、グローバルの唯一のポイントは、どこからでも参照できるため、パラメーターとして渡す必要がないことです。

于 2012-11-10T21:27:50.660 に答える
5

複雑な配列を渡すために、私はそれらを構造体でラップすることを好みます:

struct array {
    int a[5][3][3];
};

void function(struct array *a) ...

これにより、配列を関数の引数として渡そうとする際の多くの落とし穴を回避できます。

于 2012-11-10T21:20:57.927 に答える
-4

代わりにポインタを使用する場合がありますint***a

int array[5][3][3]
void dummy(int d[][3][3])
{
     d[1][1][1] = 0;
 }

ボイドとして渡すこともできます*その後

 int array[5][3][2]
 void  function(int* b)
 {
   int i=0;
   int j=1;
   int k=2;
   l[ k*(3*2)+j*(2)+i ] = 9;
 }
 function((int*) array);
于 2012-11-10T21:14:57.583 に答える