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에서는 그렇지 않습니다. 그 이유는 다음과 같습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!