| [ 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가 나겠지요. |