다음은 2D 배열을 할당하는 두 가지 방법입니다.
cell *(*p_cell)[height][width] = malloc(sizeof(*p_cell));
p_cell
은 cell
개체에 대한 포인터의 2D 배열에 대한 포인터입니다. 당신이, 좌표 i
에서 j
을 항목을 얻을 것
cell *(*p_cell)[][width] = malloc(height * sizeof(*p_cell));
:
cell *p = (*p_cell)[i][j];
배열의 배열에 p_cell
포인터를 만드는 것이 더 쉬울 것입니다 : 좌표 i
에서 항목은 j
이 함께 검색된다
cell *p = p_cell[i][j];
위의 배열은 초기화되지 않았으므로 기존 cell
개체에 대한 포인터 또는 할당 된 cell
개체에 대한 포인터.2 차원 배열 만 기능 및 특성 width
및 height
로컬로 사용되는 경우
는 로컬 스토리지에 2 차원 어레이를 정의 할 수 있으며, 너무 크지 않다 :
cell *p_cell[height][width];
width
로서
및 height
동적 값이며, 정적 초기화는 사용할 수 없습니다. 할당 된 루프처럼 중첩 된 루프로이 배열을 초기화해야합니다.
질문 : cell
에 대한 포인터로 요소 유형이 정말로 필요합니까?. 이러한 포인터 중 일부가 동일한 개체를 가리 키거나 null 값을 갖거나 다른 곳에서 참조 된 cell
개체를 가리키는 경우에만 유용합니다. 그렇지 않으면 기능에 대한 로컬 또는 malloc()
또는 calloc()
할당하거나, cell
오브젝트의 배열을 사용하는 것이 더 쉬울 것이다 :
cell p_cell[][width] = calloc(sizeof(*p_cell), height);
'셀 * p_cell [높이] [폭] = malloc에 (높이 * 폭 * sizeof (cell *));'는 유효하지 않으므로 사용할 수 없습니다. 어쩌면 당신은'cell (* p_cell) [height] [width] = malloc (height * width * sizeof (cell *)); 응용 프로그램 목표를 알지 못하면 "최선의 방법"은 광범위한 논의 없이는 식별 할 수 없습니다. – chux
이'cell * p_cell [height] [width];'는 이미'cell', 즉'p_cell'에 대한 포인터의'height'x'width' 크기 배열을 할당합니다. – alk