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 にはありません。その理由は次のとおりです。
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 サイトの他の関連記事を参照してください。