>백엔드 개발 >C++ >C 및 C의 함수에 다차원 배열을 올바르게 전달할 수 있는 방법은 무엇입니까?

C 및 C의 함수에 다차원 배열을 올바르게 전달할 수 있는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-15 00:50:12761검색

How Can I Correctly Pass Multidimensional Arrays to Functions in C and C  ?

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 모두의 함수에 다차원 배열을 전달하는 방법은 포인터 연산이라고 알려진 기술입니다. 채용됨:

  1. 배열 포인터를 포인터에 대한 포인터로 선언: int **arr.
  2. 배열 이름을 포인터에 대한 포인터로 변환 배열 포인터: arr = (int **)a.

수정된 코드

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.