2013-05-02 5 views
1

배열 배열 배열을 어떻게 선언합니까? 배열에 s[]이 있다고 가정 해보십시오. s[0]은 다른 배열 a[]을 포함하고 a[0]은 배열 b[]을 포함합니다. 포인터로 어떻게 할 수 있습니까?C 배열 배열 배열

+6

http://cdecl.org –

+1

's [0]'을 (를) 배열 또는 배열 요소의 포인터로 바꾸시겠습니까? 'a [0]'을 배열로 사용하거나 배열 요소에 대한 포인터로 사용 하시겠습니까? –

+0

Eric의 질문을 명확히하기 위해 : 하나는 '영리한'색인 생성 문제이며 실제로는 하나의 큰 배열입니다. 다른 하나는 실제 포인터 참조를 사용하며 최종 다차원 배열은 더 이상 연속하지 않습니다. –

답변

4
// b is an array of int. (N is some number.) 
int b[N]; 

// a Option 0: a is an array of M arrays of N int. (M is some number.) 
int a[M][N]; 

// a Option 1: a is an array of M pointers to int. 
int *a[M]; 
a[0] = b; 
// Other elements of a must also be assigned in some way. 

// s Option 0: s is an array of L arrays of M arrays of N int. (L is some number.) 
int s[L][M][N]; 

// s Option 1: s is an array of L arrays of M pointers to int. 
int *s[L][M]; 
s[0][0] = b; 
// Other elements of s must also be assigned in some way. 

// s Option 2: s is an array of L pointers to arrays of N int. 
int (*s[L])[N]; 
s[0] = a; // Can use a from a Option 0, not a from a Option 1. 
// Other elements of s must also be assigned in some way. 

// s Option 3: s is an array of L pointers to pointers to int. 
int **s[L]; 
s[0] = a; // Can use a from a Option 1, not a from a Option 0. 
// Other elements of s must also be assigned in some way. 

각 개체가 배열 대신 최상위 수준의 포인터 인 옵션도 있습니다. 나는 그것들을 보여주지 않았다. 포인터를 가리키는 포인터를 정의해야합니다.

+0

+1 : 특히 OP에 질문에 대답해야했지만 넉넉한 답변이 아니 었습니다. – wallyk

+0

옵션 2에서's [0] = a'을하고 싶지 않으십니까? (3 차원으로 만들기 위해) – anatolyg

+0

@anatolyg : 예, 좋을 것 같습니다. –

0

간단한 접근법.

int length = 10; 

int b[5] = {0,1,2,5,4}; 

int c[7] = {1,2,3,4,5,6,7}; 

int** s = malloc(sizeof(int*) * length); 

s[1] = b; 
s[2] = c; 

등등 ...

이 예에서는 2 층이다. 포인터 s***s으로 만들고 적절하게 변경하여 3 계층으로 만듭니다.

+0

's + 1'과's + 2'는 좌변 값이 아니며 할당의 왼쪽에있을 수 없습니다. 당신은's [1]'과's [2]'를 의도했을 것입니다. 그리고 이것은's'에 단지 두 개의 층을 주며, 질문에서 요구 된 3 개의 층을 제공하지 않습니다. –

+0

@EricPostpischil 예. 당신이 맞습니다. 's + 1'은 컴파일되지 않습니다. 하지만's + 1'은's [1]'의 합성 설탕이라고 생각했습니다. 참고 : 예를 들어 C 언어에서 a [i] 표기법은 * (a + i) - Wikipedia에 대한 구문 설탕입니다. –

+0

@EAGER_STUDENT :'s + 1'은'* (s + 1)'이 아닙니다. 별표는 세상의 차이를 만듭니다. – dreamlax