KAIST

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ KAIST ] in KIDS
글 쓴 이(By): earny (O-| L|)
날 짜 (Date): 2000년 11월  9일 목요일 오전 12시 46분 20초
제 목(Title): Re: [질문] c언어에서 포인터관련..


말씀하신대로...

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에 따라 주소연산의 단위증감폭이 달라집니다.

******

물론 정확히 같은 type은 아니지만..

char* a[2][2] = {{"a", "a"},{"a", "a"}};
char*** b;

b = a;

와 같은 것은 거의 틀린 문장 아닙니까? (일반적인 경우에..)

위와 같이 한 후에.. 

b[1][1]과 같은 경우를 access하면 거의 segfault가 나겠지요.

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