<o:p></o:p>

void InputName(char **pName)

{

     *pName=(char *)malloc(12);

     strcpy(*pName,"Cabin");

}

 <o:p></o:p>

void main()

{

     char *Name;

 <o:p></o:p>

     InputName(&Name);

     printf("이름은 %s입니다\n",Name);

     free(Name);

}


이런 프로그램이잇는데

이런프로그램이 일단 처음에 Name이 정적으로 정해지지않고
동적으로 예를들어 사용자에게 입력받는다햇을때 메모리를 동적으로 할당하는걸 보여주는 예제인데..

여기서 InputName 함수의 인자는 2중포인터인데요
그럼 inputName(&Name)이렇게 함수를 호출햇을때는
 원형의 2차포인터 **pName이 **pName=&Name 이렇게 초기화 되는거랑 같은건가요?

그럼 결국 저것은 2차포인터 pName가가 1차포인터 *Name의 메모리상의 주소를 가르킨다 라는 뜻인것 같은데요

그밑에 *pName=(char *)malloc(12);는 어떻게 이해해야 될까요
그냥 엠얼록 함수를 이용해서 메모리공간 어딘가에 비어잇는 메모리를 12바이트만큼 문자형으로 캐스트해서 할당한후
그 엠얼록 함수가 리턴하는 번지값을 

*pName즉 , 2차포인터가 가르키는 1차포인터의 값 (처음 char *Name때 초기화 하지않앗으니 지금은 아무주소도 가르키지 않음), 즉 1차포인터가 가르키는 메모리주소랑 엠얼록 함수가 리턴하는 번지값을 동일화시켜라 이런뜻인가요? 

그다음 strcpy에 그공간안에 Cabin이라는거를 넣는다 이런식으로 이해하는데요

제 이해하는게 맞는건가요?
감사합니다 ㅜㅜ


그럼저기서 왜

 <o:p></o:p>

void InputName(char *pName)

{

     pName=(char *)malloc(12);

     strcpy(pName,"Cabin");

}

 <o:p></o:p>

void main()

{

     char *Name;

 <o:p></o:p>

     InputName(Name);

     printf("이름은 %s입니다\n",Name);

     free(Name);

}

이렇게 하면 프로그램이 작동하지않는 이유에대해서 한번 명확하게 정리좀 부탁드릴께요 ㅜㅜ

그리고 배열명이 앞에 아무런 연산자없이 쓰이면 그 배열이 차지하고 잇는 메모리값의 시작주소와 똑같다고 하는데요

그럼 포인터이름은 무엇을 나타내나요? 마찬가지로 포인터 이름도 그포인터가 메모리상에 "가지는" 공간의 주소인가요?
아니면 그포인터가 "가르키는" 주소인가요..
감사합니다 ㅜㅜ