KAIST

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ 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에 따라 주소연산의 단위증감폭이 달라집니다.


[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.