다차원 배열을 함수에 전달할 수 없다는 점 이해
다음 코드 조각을 고려하세요.
#include <stdio.h> 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(a, 4, 4); }
이 코드 int 포인터 배열을 취하는 함수 print에 다차원 배열 a를 전달하는 것을 목표로 합니다. int *arr[]. 그러나 C 에서 이 코드는 다음 오류를 생성합니다.
cannot convert `int (*)[4]' to `int**' for argument `1' to `void print(int**, int, int)'
설명:
이 문제의 핵심은 호환되지 않는 데이터 유형에 있습니다. a와 같은 C 스타일 다차원 배열은 int *arr[] 포인터 배열에 대한 포인터로 직접 변환할 수 없습니다. C에서 a의 데이터 유형은 정수의 2차원 배열을 나타내는 int[4][4]입니다. 반면, int *arr[]는 정수 배열에 대한 포인터이며, 여기서 각 요소는 정수에 대한 포인터입니다.
해결책:
To 이 문제를 해결하고 int 포인터 배열을 사용하는 함수에 다차원 배열을 전달하는 경우 코드를 수정하여 다차원 배열을 포인터 배열로 명시적으로 변환할 수 있습니다. 이는 "다차원 배열을 C의 포인터로 변환"이라는 질문에 대한 답변에 설명된 것과 같은 기술을 활용하여 달성할 수 있습니다.
추가 참고 사항:
위 내용은 C에서 다차원 배열을 포인터 배열로 함수에 전달할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!