Skip to content

9-3 퀴즈에 대한 질문과 답 #48

Description

@CNUCOM

9-3 퀴즈에서 char *p[10] 은 올바르지 않고 char **q[10]는 올바른 이유에 대해 질문이 있었습니다. 좋은 질문이라 공유합니다.

char *p[10] 은 포인터의 배열이고
char **q[10] 은 포인터의 포인터의 배열이므로 즉 겉보기에는 그냥 둘다 배열입니다.

그러나 이 경우에 tptr = &p; 는 포인터에서 포인터로 가는 assignment 인 반면,
tptr = q; 는 배열에서 포인터로 가는 assignment 입니다. 따라서 각각 다른 규칙의 적용을 받습니다.

<tptr = &p;>
포인터에서 포인터로 가는 assignment는 (double* dp 를 char* cp로 지정하면 안되듯이) 내용 타입이 반드시 같아야합니다.
&p는 "배열"의 포인터이고 tptr은 "포인터"의 포인터이므로, 즉 내용타입이 달라서 안맞습니다.

<tptr = q;>
(동일한 내용 타입의) 배열을 (동일한 내용 타입의) 포인터에 지정하는 것은 char a[10]; char * p = a; 처럼 가능합니다. 이에 따라 tptr = qchar**의 배열을 char**의 포인터에 지정하고 있으므로 내용 타입이 같아서 문제가 없이 잘 동작합니다.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions