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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-01 13:41:10701ブラウズ

How Can I Correctly Pass a Multidimensional Array to a Function in C  ?

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

このコード スニペットでは、C スタイルの多次元配列を関数に渡す試みが行われます。整数ポインターの配列を期待する関数:

#include<stdio.h>
void print(int *arr[], int s1, int s2) {
    ...
}

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

このコードは C でコンパイルされますが、 C にはありません。その理由は次のとおりです。

  • C では、多次元配列は最初の要素へのポインターに分解される可能性があります。 これは、上記のコードが次と同等であることを意味します。
print(&a[0],4,4);
  • C では、この減衰はありません。 配列型 int4 はポインタ型 int** に暗黙的に変換できません。これはエラー メッセージの説明です:

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

解決策:

多次元配列を C の関数に渡すには、明示的に変換する必要があります。それを適切な型のポインタに設定します。これは、次の手法を使用して実現できます。

#include<stdio.h>
void print(int **arr, int s1, int s2) {
    ...
}

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

(int )** キャストを使用して配列をポインタに明示的に変換することで、コードがコンパイルされ、意図したとおりに動作するようになります。 C と C の両方。

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

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