2012-12-01 2 views
3

전달 동적 배열은 우리가이 선언을 가정 그것?2-D 정적 및

+0

두 변환 생성자가있는 타입이 걸릴 수 : P 가지 점 유적,하지만 그 함수를 오버로드 아닙니다. – chris

+0

다차원 배열 참조를 위해 컴파일러에서 생성 한 코드를 이해하면 직접 대답 할 수 있다고 생각합니다. b [i] [j]의 경우 컴파일러는 * (b + i * y + j)를 생성합니다 (또는 * (b + j * x + i) 일 수도 있음). 함수 f()는 b [] []의 크기를 알 수 없으므로 c [i] [j]에 대한 참조를 제대로 처리 할 수 ​​없습니다. –

+1

이 두 유형은 호환되지 않으므로 호환되지 않습니다. –

답변

1

물론, 단지 void* :

를 사용없이, 귀하의 질문에 대답 할 수 있습니다. 다차원 배열은 포인터에 대한 포인터와 같지 않습니다. 그 이유는 인덱싱 체계입니다. int b [2][2]은 4 개의 정수로 구성된 연속적인 메모리 블록입니다. 색인 생성은 다음과 같습니다.

b[i][j] == *(b + 2*i + j) 

두 번째 차원은 유형 정의의 일부입니다! 컴파일러는 배열의 메모리 레이아웃으로 인해 역 참조가 하나만 필요하다는 것을 알고 있습니다.

는 한편, int** a의 색인은 다음과 같이 수행됩니다

a[i][j] == *(*(a+i)+j) 
+2

우리는 정말로 위험한 오해의 소지가있는 첫 번째 라인이 정말로 필요합니까? –

+0

@ LightnessRacesinOrbit, 오해의 소지가 있습니까? 나는 당신이 모든 유형 정보를 포기하고 싶지 않다면 그것을 가로 질러 요점을 얻는다라고 생각한다, 당신은 OP가 물었던 것을 할 수 없다. – StoryTeller