ホームページ >バックエンド開発 >C++ >C および C の関数に多次元配列を正しく渡すにはどうすればよいですか?

C および C の関数に多次元配列を正しく渡すにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-15 00:50:12763ブラウズ

How Can I Correctly Pass Multidimensional Arrays to Functions in C and C  ?

C および C での多次元配列の受け渡し

C と C の両方で、 int4 型の配列を、次の配列を期待する関数に直接渡すことはできません。 int*.この非互換性は、これら 2 つの言語が多次元配列を処理する方法の根本的な違いに起因します。

C では、多次元配列名は最初の要素へのポインターに変換され、コード スニペットで例示されている実装が可能になります。ただし、 C では、関数呼び出しで使用される場合でも配列は型を維持するため、次のエラー メッセージが表示されます。

cannot convert `int (*)[4]' to `int**' for argument `1' to `void print(int**, int, int)'

Solution for C and C

To C と C の両方で多次元配列を関数に渡すには、ポインター演算として知られる手法を使用します。採用:

  1. 配列ポインターをポインターへのポインターとして宣言します: int **arr.
  2. 配列名を配列へのポインターに変換します。配列ポインタ: arr = (int **)a.

変更されたコード

void print(int **arr, int s1, int s2) {
    int i, j;
    for(i = 0; i < s1; i++)
        for(j = 0; j < s2; j++)
            printf("%d, ", arr[i][j]);
}

int main() {
    int a[4][4] = {{0}};
    print((int **)a, 4, 4);
}

重要な注意

コードはコンパイルされて実行されますC と C の両方で成功しました。ただし、*((arr i) j) の代わりに arr[i][j] を使用して配列要素に正しくアクセスできるように、printf ステートメントに追加の修正が加えられました。

多次元配列を渡すことができないことを覚えておいてください。これは C と C の配列の異なる動作から直接発生するものであり、それに応じて対処する必要があります。

以上がC および C の関数に多次元配列を正しく渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。