포인터 변수 가르키는 대상 변경 방법에 관하여 질문
조회수 832회
안녕하세요 윤성우 열혈c 프로그래밍으로 공부중인 학생입니다. 이제 막 포인터에 대하여 배우고 있는데 책에 나와있지 않은 내용에 대하여 궁금하여 질문 드립니다.
포인터 변수를 2개 초기화 한 뒤 서로 가르키는 변수를 바꾸는 내용입니다. 이게 답지의 내용입니다.
{ int num1 = 10, num2 = 20; int * ptr1 = &num1; int * ptr2 = &num2; int * temp; *ptr1 += 10; *ptr2 -= 10;
temp = ptr1;
ptr1 = ptr2;
ptr2 = temp;
printf("%d %d \n", *ptr1, *ptr2);
return 0;
}
제 생각에는 가르키는 변수는 고정되어 있기 때문에 포인터 변수에 바로 재지정해도 상관없다고 생각 하여 아래와 같이 짰습니다.
{ int num1 = 10, num2 = 20; int * ptr1 = &num1; int * ptr2 = &num2; *ptr1 += 10; *ptr2 -= 10;
ptr1 = &num2;
ptr2 = &num1;
printf("%d %d \n", *ptr1, *ptr2);
return 0;
}
둘다 정상적으로 출력이 됩니다.
질문 : 혹시 제가 한 방식대로 하면 어떠한 문제점이 있을지 궁금합니다.
답변주시면 매우 감사하겠습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
작성하신 방법은 문제의 의도를 빗겨간 것 같은데요.
애초에 문제의 의도는 두 개의 포인터가 가르키는 주소값을 서로 바꾸는 것입니다.
&num1
,&num2
값을 모른다는 가정하에 말이죠.temp 변수를 두는 것은 프로그래밍에서 일반적으로 알려진 변수 값 swap 방식입니다. 이것을 연습해 보길 의도한 문제 같아요.
댓글 입력