2012-06-20 4 views
0

나는 2 차원 배열의 한 차원을 동적으로 할당하려고합니다. 배열은 다음과 같이 선언됩니다.2 차원 배열의 한 차원을 할당하고 반환

uint16_t coord[][2]; 

좌표 수만큼 행을 할당하면됩니다. 구글 동안 나는부터, 크기 모두를 할당하기에 충분한 코드를 발견

uint16_t **coord; 

나는 여전히 위의 배열을 선언 할 수 있는지 모르겠습니다. 수행해야 할 작업 :

uint16_t *coord[2]; 

아니요?

나는 또한 너무 다른 기능이 같은 배열에 액세스 할 수있는 할당하는 기능의 배열 (그것에 포인터를) 반환해야

:

foo = coord[4][0]; 
bar = coord[4][1]; 

할당 된 배열을 반환하는 올바른 방법은 무엇입니까? clockwise/spiral rule, 다음과 같은 선언에 따르면

답변

5

:

uint16_t *coord[2]; 

당신이 원하는없는 것 같다 두 포인터의 배열입니다. 대신이를 사용할 수 있습니다 그러나 :

uint16_t (*coord)[2]; 

을이처럼 메모리를 할당 할 수 있습니다 :

이제
coord = malloc(num_entries * sizeof(uint16_t[2])); 

당신이 정상 다차원 배열로 액세스 할 수 있습니다

coord[0][0] = 1; 
coord[0][1] = 2; 
coord[1][0] = 3; 
coord[1][1] = 4; 
+0

링크 주셔서 고맙습니다. –

+1

+1 : 링크는 포인터 정의 외에도 포인터에 대해 읽은 최고의 리소스입니다. 나는이 규칙을 모르고 포인터를 아는 것없이 내가 보낸 약 수만큼의 횟수만큼 투표를하고 싶다. –

+0

+1 링크! – Thomas

0

배열과 포인터가 혼합되어 있습니다.

uint16_t coord[][2]; 

은 하나의 측정 기준을 정의하지 않았기 때문에 불완전한 유형입니다. 이니셜 라이저를 사용하여 해당 치수를 수정합니다. 그 개념에 익숙하지 않은 것 같아서 1 차원으로 따뜻하게 지내야합니다.

uint16_t line[] = { 1, 2, 3 }; 

은 세 가지 요소를 제공합니다.

관련 문제