*pi는 int *pi로 선언이 되어 있습니다.
void Func(int* pi)
{
*pi = 50;
pi =(int*)80;
}
void main(void)
{
int* pi;
*pi = 100;
Func(pi);
}
이렇게 선언을 하고 main에서 *pi의 값을출력할 경우 뭐가 나오냐 하면
50이 나옵니다. 제가 구금한 것은 저기 (int*)로 캐스팅한 부분인데요.
이 부분은 어떻게 돌아가는지가 궁금합니다. 왜 값이 들어가지 않냐는 것이죠.
그럼 답변 기다리겠습니다-ㅅ-
아마 2가지의 잘못된 생각을 하셨다고 생각합니다.
1. 포인터는 번지를 가르키는 32비트 주소값입니다. *pi를 하게 되면 그 주소값으로 접근을 하게 되며 *pi = 50을 하면 pi가 가르키는 주소값에 접근해서 그 주소값의 변수에다가 50을 넣어라 라는 의미입니다.
2. 아마 의도하신 바는 pi가 가르키는 값에 80을 넣으시려고 한거였겠지만, 실제로 pi = (int*)80을 하게 되면 포인터 pi 자체에다가 80값을 넣게 되어버립니다. 즉, 포인터 pi에 80값을 직접 넣음으로써 80번지를 가르키게 되는 것이죠. 참고로 주소값을 직접 써 넣는것은 포인터의 올바른 사용법은 아닙니다.