> 백엔드 개발 > C++ > 다차원 배열을 C 및 C의 함수에 어떻게 전달할 수 있습니까?

다차원 배열을 C 및 C의 함수에 어떻게 전달할 수 있습니까?

DDD
풀어 주다: 2024-12-24 17:28:18
원래의
186명이 탐색했습니다.

How Can Multidimensional Arrays Be Passed to Functions in C and C  ?

C 및 C의 함수에 다차원 배열 전달

프로그래밍에서 배열은 데이터 모음을 저장하는 데 필수적인 데이터 구조입니다. 다차원 배열을 다룰 때는 요소에 대한 작업을 수행하기 위해 함수에 배열을 전달하는 방법을 이해하는 것이 중요합니다.

다음 C 코드를 고려하세요.

void print(int *arr[], int s1, int s2) {
    // ...
}

int main() {
    int a[4][4] = {{0}};
    print(a, 4, 4);
}
로그인 후 복사

이 코드는 전달하는 것을 목표로 합니다. int[4][4] 유형의 다차원 배열 a를 정수에 대한 포인터 배열(int **)을 기대하는 함수로 인쇄합니다. 놀랍게도 이 코드는 C에서는 성공적으로 컴파일되지만 C에서는 컴파일되지 않습니다.

C에서 오류가 발생하는 이유

C에서는 오류가 명확합니다.

cannot convert `int (*)[4]' to `int**' for argument `1' to 
`void print(int**, int, int)'
로그인 후 복사

이 오류는 다음을 의미합니다. C에서는 다차원 배열(int[4][4])에서 정수에 대한 포인터 배열(int **)로의 암시적 변환을 허용하지 않습니다. 이는 이 두 데이터 유형이 구조와 해석이 근본적으로 다르기 때문입니다.

오류 수정 방법

이 오류를 수정하려면 C에서 "배열 주소 붕괴"라는 기술을 사용할 수 있습니다. 또는 다차원 배열을 C의 포인터 배열로 명시적으로 변환합니다. .

씨:

int main() {
    int a[4][4] = {{0}};
    print(a, 4); // Pass the base address of the multidimensional array (array address decay)
}

void print(int *arr, int s) {
    // ...
}
로그인 후 복사

씨 :

int main() {
    int a[4][4] = {{0}};
    print(a, 4, 4); // Explicit conversion to an array of pointers
}

void print(int **arr, int s1, int s2) {
    // ...
}
로그인 후 복사

위 내용은 다차원 배열을 C 및 C의 함수에 어떻게 전달할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿