3

これらの宣言があると仮定します。

int** a;
int b[x][y];

関数を実装できますか

foo f(bar c) {}

それは私を可能にします

f(a);
f(b);

それをオーバーロードする必要はありませんか?

4

1 に答える 1

1

確かに、使用してvoid*ください:)

そして、あなたの質問に答えるために、いいえ。多次元配列は、ポインターへのポインターと同じではありません。その理由は、索引付けスキームです。int b [2][2]4つの整数の連続メモリブロックです。インデックスを作成することは、次のようになります。

b[i][j] == *(b + 2*i + j)

2番目の次元はタイプ定義の一部です!コンパイラは、配列のメモリレイアウトにより、必要な間接参照が1つだけであることを認識しています。

一方、int** aインデックス作成は次のように行われます。

a[i][j] == *(*(a+i)+j)
于 2012-12-02T00:05:28.157 に答える