2016-06-23 2 views
1

열 크기가 제공되지 않으면 컴파일러에서 크기 정보를 알 수없는 경우가 많습니다. 그러나 컴파일러가 행 크기를 어떻게 알 수 있습니까? 열 크기를 해석 할 수없는 이유는 무엇입니까?2d 배열을 함수로 전달할 때 열 크기를 지정하는 이유

+3

당신이 말하는 언어는 무엇입니까? –

+1

[2D 배열을 매개 변수로 전달할 때 왜 열 크기를 지정해야합니까?] (http://stackoverflow.com/questions/12813494/why-do-we-need-to-specify-the -column-size-passing-a-2d-array-as-a-parameter) – melpomene

+0

나는 C에 대해 이야기하고있다. – nathan

답변

2

배열을 인수로 함수에 전달하는 동안 컴파일러는 암시 적으로 배열 참조를 포인터로 변환합니다. 이것은 분명히

int method(int *a) 
    int method(int a[]) 

같은 일차원 배열의 경우에서 볼 수있는 양이 라인 (포인터 배열 참조는 다르지만) 배열 식에 나타날 때마다 때문에, 컴파일러는 암시를 생성 여기 동등 프로그래머가 & a [0]을 쓴 것처럼 배열의 첫 번째 요소에 대한 포인터. 그러나이 규칙은 재귀 적이 지 않습니다. 즉, 2 차원 배열 전달은 포인터에 대한 포인터가 아니라 배열에 대한 포인터로 처리됩니다.

int method(int b[3][5]); 

int method(int (*b)[5]); 

로 변환 및 행의 크기는 중요하지 않습니다 때문에 호출 된 함수가 배열을위한 공간을 할당하지 않기 때문에, 열 그러나 크기의 크기를 제공하기 위해 여전히 중요하다 정렬. 자세한 내용은 here을 참조하십시오.

+0

안녕, 라지. 좋은 게시 및 참조 주셔서 감사합니다. 그것은 저에게 정말로 새로운 것을주었습니다. 그러나 나는 여전히 한 문장으로 분명하지 않다. "호출 된 함수가 배열에 공간을 할당하지 않기 때문에 전체 크기를 알 필요가 없으므로 NROWS 행 수를 생략 할 수 있습니다. 여전히 중요합니다 " – nathan

+0

2 차원 배열은 암시 적으로 포인터 배열이며, 모든 배열 크기에 대해 알고 있듯이 언급해야합니다. 여기서 크기는 열 크기입니다. @ user3529352 –

관련 문제