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

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

DDD
リリース: 2024-12-24 17:28:18
オリジナル
183 人が閲覧しました

How Can Multidimensional Arrays Be Passed to Functions in C and C  ?

C および C の関数に多次元配列を渡す

プログラミングにおいて、配列はデータのコレクションを格納するための重要なデータ構造です。多次元配列を扱う場合、多次元配列を関数に渡して要素の操作を実行する方法を理解することが重要です。

次の C コードを考えてみましょう。

void print(int *arr[], int s1, int s2) {
    // ...
}

int main() {
    int a[4][4] = {{0}};
    print(a, 4, 4);
}
ログイン後にコピー

このコードは、次の C コードを渡すことを目的としています。 int[4][4] 型の多次元配列 a を、整数 (int **) へのポインターの配列を期待する関数 print に渡します。驚くべきことに、このコードは C では正常にコンパイルされますが、 C では正常にコンパイルされません。

なぜ C でエラーが発生するのか

C では、エラーは明らかです:

cannot convert `int (*)[4]' to `int**' for argument `1' to 
`void print(int**, int, int)'
ログイン後にコピー

このエラーは次のことを意味します。 C では、多次元配列 (int[4][4]) から整数へのポインターの配列 (int **) への暗黙的な変換は許可されていません。これは、これら 2 つのデータ型は構造と解釈が根本的に異なるためです。

エラーの修正方法

このエラーを修正するには、C の「配列アドレス減衰」と呼ばれる手法を使用できます。または、C で多次元配列をポインターの配列に明示的に変換します。 .

C:

int main() {
    int a[4][4] = {{0}};
    print(a, 4); // Pass the base address of the multidimensional array (array address decay)
}

void print(int *arr, int s) {
    // ...
}
ログイン後にコピー

C :

int main() {
    int a[4][4] = {{0}};
    print(a, 4, 4); // Explicit conversion to an array of pointers
}

void print(int **arr, int s1, int s2) {
    // ...
}
ログイン後にコピー

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート