C 2 차원 배열은 배열 배열보다 많거나 적습니다. 이러한 2 차원 배열은 "거친"배열 일 수 없으며, 즉 각 행은 동일한 수의 요소를 가져야합니다. 당신은 첫 번째 차원을 생략 할 수 있습니다
int big[4][4] =
{ { 1, 2, 3, 4 },
{ 10, 12, 13, 14 },
{ 8, 9, 15, 16 },
{ 17, 18, 19, 20 } };
: int big[][4] = ...
을하고, 길이는 초기화에 의해 결정됩니다,하지만 당신은 두 번째를 생략 할 수 없기 때문에 당신의 특별한 경우를 들어, 당신은 그것을 선언 할 수 있습니다. 이 방법의
하나의 장점은 단일 개체라는 것이다, 그리고 당신은 얼마나 많은 요소를 결정하기 위해 sizeof
를 사용할 수 있습니다
sizeof big == 16 * sizeof (int)
sizeof big[0] == sizeof *big == 4 * sizeof (int)
sizeof big[0][0] == sizeof (int)
그러나 단점은 크기가 고정되어 있다는 점이다.
다른 방법은 포인터 배열을 사용하는 곳 어레이의 첫 번째 요소의 각 포인터 점수
int row0[] = { 1, 2, 3, 4 };
int row1[] = { 10, 12, 13, 14 };
int row2[] = { 8, 9, 15, 16 };
int row3[] = { 17, 18, 19, 20 };
int *big[4] = { row0, row1, row2, row3 };
는 (이니셜에서
row0
배열 이름이지만 포인터로 붕괴 첫 번째 요소로, 마찬가지로
row1
,
row2
및
row3
에 대해). 이것은보다 유연하지만 각 행의 요소 수를 추적해야합니다.
sizeof big[0]
은 행 자체가 아닌 포인터의 크기를 제공합니다. .
또 다른 방법은 big
포인터 - 투 - 포인터를 만들 수 있습니다 :
int row0[] = { 1, 2, 3, 4 };
int row1[] = { 10, 12, 13, 14 };
int row2[] = { 8, 9, 15, 16 };
int row3[] = { 17, 18, 19, 20 };
int *rows[] = { row0, row1, row2, row3 };
int **big = rows;
이 (그리고 실제로 당신은 아마 malloc()
으로 모든 할당 것
네 번째 접근 방식을 훨씬 더 유연를, 아마도 매우 유용하지는 않지만 배열에 대한 포인터의 배열을 big
으로 만들면됩니다.
배열 - 포인터 감쇠 규칙으로 인해 big
은 4 가지 유형으로 4 가지 유형이 있으며, int
요소를 참조하는 동일한 구문을 사용할 수 있습니다 (big[x][y]
).
권장되는 읽기 : 항상 그렇듯이 : comp.lang.c FAQ의 섹션 6.
감사합니다. – Spencer