<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);
}
이렇게 하면 프로그램이 작동하지않는 이유에대해서 한번 명확하게 정리좀 부탁드릴께요 ㅜㅜ
그리고 배열명이 앞에 아무런 연산자없이 쓰이면 그 배열이 차지하고 잇는 메모리값의 시작주소와 똑같다고 하는데요
그럼 포인터이름은 무엇을 나타내나요? 마찬가지로 포인터 이름도 그포인터가 메모리상에 "가지는" 공간의 주소인가요?
아니면 그포인터가 "가르키는" 주소인가요..
감사합니다 ㅜㅜ
자 생각을 해봅시다우선 당신이한데로라믄일차포인터의 값이 콜밸류로 넘어가것지근데 포인터변수의 값은 특정변수의 주소값이겠지근데 아직 Name이라는 포인터변수는 초기화가 안되서 쓰레기값을 가지고있지(NULL로초기화해도 어차피실행안됨)즉 당신이한데로라믄함수의 인자(pName)로 쓰레기값이 콜밸류로 넘어가것지그리고 넘어간 쓰레기값은 pName지역변수(※지역변수란게 중요)에 저장되고 다시동적할당된 주소가 저장되것지근데 아까말했듯이 pName은지역변수거든그래서 함수가종료되면 스택세그먼터에서 사라져버리거든그럼 동적할당된 주소를가리키던 pName이사라졌으니 어떤변수가 그 주소를 가리키게될카?없는거지그래서 2차포인터써서 main에있는 name포인터변수에 값(특정변수에 주소값)이 아닌 name변수에 주소
어라 나만글이짤려보이는건가
열심히썼는데 핸폰이라그른가 댓글이 짤렸넴
제가 개념을 잘못이해하고 잇나요?..
pName=(char *)malloc(12); 이것도 pName=(char)malloc() 으로 고쳐야지 ㅡㅡ
이사람은또 뭔소리임 저건 저렇게하는거맞음 (char*)이건 명시적으로 멀록이 반환하는 void* 형 반환값을 캐스팅해주는건데 그걸 왜 char로바꿈? 바꿔지지도않고 님도 포인터다시공부해야될듯
웹돌이//우선 포인터변수도 일반변수와같은 변수다일반변수가 값을갖고 주소값이있듯포인터변수도 값을갖고 주소값이있음단지 일반변수는 값이 int형이면 정수를char형이면 문자일뿐이고포인터변수는 값이 특정변수의 주소값(이거나 NULL이거나 쓰레기값)일뿐인거지그리고 일반변수가 메모리상 자신의위치가 있듯이(이게주소값이지)포인터변수도 메모리상에서 자신의 위치가있는거지일반변수를 콜레퍼런스로 넘기는건 심심찮게 하면서 똑같은변수인 포인터변수는 왜이렇게어려워함(사실 나도 종종햇갈리고3차이상되면 머리깨짐ㅋ)
아깝