|
먼저 char (*p_ptr)[20]; 을 보면
연산자 우선순위가 (), [], * 이므로(아마도) 이 문장의 의미는
char*를 20개 가진 배열을 만들라는 뜻입니다. 즉 (char *)[20] 이죠~
따라서 char를 가리키는 포인터를 20개 만들게 됩니다.
그래서 p_ptr[0] = 포인터 형태로 사용하게 됩니다.
두번째로 char *p_ptr[20]; 을 보면
연산자 우선순위에 따라서 p_ptr은 *(char[20])의 형을 가지게 됩니다.
따라서 char[20]를 가진 배열 주소의 주소를 가지게 됩니다.
주소의 주소라고 하면 조금 헷갈리시겠죠?
char ptr[20]이라고 할 때 ptr은 ptr[20]의 첫번째 위치를 가리키고 있습니다.
여기서 ptr은 주소입니다. 그렇지만 char* p_ptr[20]으로 하면
앞에서 나온 주소 ptr의 주소를 가리키는 변수를 생성하게 됩니다.
따라서 이런 형태가 되겠죠?
p_ptr -----> *p_ptr ------> (*p_ptr)[0]
보통 책에서 이런 문제를 다루는 것은 연산자 우선순위를 설명하기 위해서 적습니다.
그렇지만 보통 해독을 편리하게 하기 위해서 *p_ptr[20]인 경우에도 *(p_ptr[20])
으로 적는 버릇을 들이는 것이 좋습니다.
전승호 님이 쓰신 글 :
:
: char (*p_ptr)[20]; 과 char *p_ptr[20]; 의 차이점이
: 뭔지 정말 궁금해요.
: 책에서는
: char (*p_ptr)[20]; 와 char *p_ptr[20]; 두 경우가 서
: 로 다르게 쓰인다고 하는데 설명에는 거의 차이가 없더
: 군요.
: 그래도 다른점이 있다고 하니 꼭좀 알고 싶어요.
: 꼭좀 가르쳐 주세요.
:
:
|