C에서는 다음 코드를 사용하여 힙에 2 차원 배열을 동적으로 할당 할 수 있다는 것을 알고 있습니다.
int** someNumbers = malloc(arrayRows*sizeof(int*));
for (i = 0; i < arrayRows; i++) {
someNumbers[i] = malloc(arrayColumns*sizeof(int));
}
분명히 이것은 실제로 정수로 구성된 여러 개의 1 차원 배열에 대한 포인터의 1 차원 배열을 만들고 "시스템"은 내가 요청할 때 의미하는 바를 알아낼 수 있습니다.
someNumbers[4][2];
그러나 다음 줄과 같이 2D 배열을 정적으로 선언하면 ... :
int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS];
... 스택에서 유사한 구조가 생성됩니까? 아니면 완전히 다른 형태입니까? (즉, 포인터의 1D 배열입니까? 그렇지 않은 경우, 무엇이며, 이에 대한 참조는 어떻게 파악됩니까?)
또한 "시스템"이라고 말했을 때 실제로 그것을 알아내는 데 책임이있는 것은 무엇입니까? 커널? 아니면 C 컴파일러가 컴파일하는 동안 정렬합니까?
malloc()
은 N 차원 배열을 초래하지 않습니다. . 결과적으로 1 차원 배열 을 완전히 분리하기위한 포인터 배열 [포인터 배열 [...]]이 생성됩니다 . 참조 올바르게 다차원 배열을 할당하는 할당 방법을 참조 TRUE N 차원 배열.