배열 표현식이 대부분의 컨텍스트에 나타나면 해당 유형이 "T의 N 요소 배열"에서 "T 포인터"로 암시 적으로 변환되며 해당 값은 배열의 첫 번째 요소 주소로 설정됩니다. 이 규칙의 예외는 배열 표현식이 sizeof
또는 address-of (&
) 연산자의 피연산자이거나 배열식이 선언의 다른 배열을 초기화하는 데 사용되는 문자열 리터럴 인 경우입니다. 이 코드의 맥락에서 의미
는 box_sort
로 호출, 식 boxes
의 유형을 암시 그래서 당신의 기능과 같은 매개 변수 유형을 기대해야 M-element array of N-element array of int
에서 pointer to N-element array of int
, 또는 int (*)[MAX_DIMENSIONALITY+1]
로 변환된다는 점이다 :
void box_sort(int (*arr)[MAX_DIMENSIONALITY+1], int x, int y)
{
...
}
int *a
이후
및 int a[]
int (*a)[N]
이 int a[][N]
과 동의어입니다 다음, 그래서 당신은
로 위를 작성할 수, 함수 매개 변수 선언의 동의어
void box_sort(int arr[][MAX_DIMENSIONALITY+1], int x, int y)
{
}
비록 내가 개인적으로 포인터 표기법을 선호하지만, 정확히 무엇이 진행되고 있는지를 반영하기 때문에. 함수에서, 당신은 정상으로 arr
첨자 것이 주 : 표현 arr[x]
이 *(arr + x)
에 해당합니다
arr[x][y] = ...;
때문에, 포인터는 암시 적으로 역 참조. 당신은 임의의 크기의 배열을 작업 할 box_sort하려면
(즉, 두 번째 차원은 반드시 MAX_DIMENSIONALITY + 1없는 배열), 다음 한 가지 방법은 다음을 수행하는 것입니다 : 기본적으로
int boxes[X][Y];
...
box_sort (&boxes[0], X, Y, x, y);
...
void box_sort(int *arr, size_t rows, size_t cols, int x, int y)
{
...
arr[x*cols + y] = ...;
}
, 당신은 boxes
을 int의 1-d 배열로 취급하고 수동으로 오프셋을 계산합니다.
'MAX_BOXES' 및'MAX_DIMENSIONALITY '은 무엇입니까? 그것들은 매크로인가, 상수인가 ...? – Jacob