| [ KAIST ] in KIDS 글 쓴 이(By): alexa () 날 짜 (Date): 2000년 11월 8일 수요일 오전 11시 13분 12초 제 목(Title): Re: [질문] c언어에서 포인터관련.. | 1. char *str[3][] --> char *str[][2] | | C에서 배열의 descriptor는 맨 좌측의 것만 생략할 수 있습니다. | 이를 이해하기 위해서는 pointer와 subarray의 상관관계에 대한 | 이해가 필요합니다. | |�2. char ****s; --> char ***s; | | char *s 는 char *str 와 동등한 Type 선언 | char **s 는 char *str[] 와 동등한 Type 선언 | char ***s 는 char *str[][2] 와 동등한 Type 선언 | char* str[], char* str[][2], char* str[][2][2], ... 은 모두 char** 와 같은 type입니다. 어차피 메모리 상에 linear하게 잡히죠. 단지 사람에게 쓰기 편하게 편의성을 제공하는 것 뿐이죠. +++++ 말씀하신대로... char *str1[]; char *str2[][2]; char *str3[][2][2]; 은 메모리 상에 Linear하게 잡히므로 char **ptr = str1; char **ptr = str2; char **ptr = str3; 초기화하고 *(ptr + i) 형태로 모두 억세스할 수 있습니다. 물론, 원하는 위치의 i 값을 계산해 내려면 배열의 차원수와 각 차원의 원소 갯수를 알아야 겠지요. 하지만, str1 + 1 --> &(str[1]), str2 + 1 --> &(str2[1][0]), str3 + 1 --> &(str3[1][0][0]) 이므로, 같은 포인터 type은 아닙니다. 포인터가 지칭하는 대상의 Type에 따라 주소연산의 단위증감폭이 달라집니다. |