C 및 C에서 다차원 배열 전달
C와 C 모두에서 int4 유형의 배열은 배열을 기대하는 함수에 직접 전달할 수 없습니다. 정수*. 이러한 비호환성은 두 언어가 다차원 배열을 처리하는 방식의 근본적인 차이에서 비롯됩니다.
C에서 다차원 배열 이름은 첫 번째 요소에 대한 포인터로 바뀌므로 코드 조각에 예시된 구현이 가능합니다. 그러나 C에서는 배열이 함수 호출에 사용될 때에도 해당 유형을 유지하므로 오류 메시지가 발생합니다.
cannot convert `int (*)[4]' to `int**' for argument `1' to `void print(int**, int, int)'
Solution for C and C
To C와 C 모두의 함수에 다차원 배열을 전달하는 방법은 포인터 연산이라고 알려진 기술입니다. 채용됨:
수정된 코드
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((int **)a, 4, 4); }
중요사항
코드가 컴파일되고 실행됩니다. C 와 C 모두에서 성공적으로. 그러나 *((arr i) j) 대신 arr[i][j]를 사용하여 배열 요소에 대한 올바른 액세스를 보장하기 위해 printf 문을 추가로 수정했습니다.
다차원 배열을 전달할 수 없다는 점을 기억하세요. 이는 C와 C의 배열의 고유한 동작에서 직접 발생하므로 이에 따라 해결해야 합니다.
위 내용은 C 및 C의 함수에 다차원 배열을 올바르게 전달할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!