Skip to content

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

Open
@CNUCOM

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**의 포인터에 지정하고 있으므로 내용 타입이 같아서 문제가 없이 잘 동작합니다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions