> 백엔드 개발 > C++ > C에서 `int`가 작동할 것으로 기대하는 함수에 C 스타일 2D 배열을 전달하지 못하는 이유는 무엇입니까?

C에서 `int`가 작동할 것으로 기대하는 함수에 C 스타일 2D 배열을 전달하지 못하는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-21 03:07:13
원래의
1017명이 탐색했습니다.

Why Doesn't Passing a C-Style 2D Array to a Function Expecting `int` Work in C  ?

C에서 int* 배열을 사용하는 함수에 C 스타일 다차원 배열을 전달하는 것이 실패하는 이유

문제:

C에서 int* 배열을 기대하는 함수에 다차원 C 스타일 배열을 전달하면 컴파일러 오류입니다.

이유:

int4와 같은 다차원 배열은 int* 유형의 포인터로 직접 변환할 수 없습니다. 이것이 바로 int입니다. arr[]은 함수에서 나타냅니다. 선언.

예:

#include<stdio.h>
void print(int *arr[], int s1, int s2) {
    // ...
}

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

C는 오류를 보고합니다.

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

해결책:

C와 C 모두에서 다차원 배열을 int**로 전달하는 것은 그렇지 않습니다. 유효한. 이를 효과적으로 달성하려면 다음 기술을 사용하여 배열을 포인터로 변환해야 합니다.

  • 배열을 다른 값(예: {1})으로 초기화하여 C가 배열을 간과하지 않았는지 확인합니다. 버그가 전달되었습니다.
  • 다음을 사용하여 요소에 올바르게 액세스하도록 printf 문을 수정하세요. ((arr i) j) 또는 arri.
  • 스택 오버플로 스레드 "다차원 배열을 c의 포인터로 변환"에 제시된 해결 방법을 활용하세요.

참고:

컴파일러 경고 무시 또는 구현 실패 적절한 변환으로 인해 정의되지 않은 동작과 예측할 수 없는 결과가 발생할 수 있습니다.

위 내용은 C에서 `int`가 작동할 것으로 기대하는 함수에 C 스타일 2D 배열을 전달하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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