c++ 포인터 swap 문제
조회수 399회
기초적인 문제인데요~ 포인터 주소를 서로 swap 해주는 함수를 만들었는데 출력하면 그대로 원래 값으로 됩니다. 디버깅을 해도 의문이 해소가 안되네요!
#include <iostream>
using namespace std;
void swap(int* a, int* b){
int * temp;
temp = a;
a = b;
b = temp;
}
int main(int argc, const char * argv[]) {
int num1=20, num2=30;
swap(&num1, &num2);
cout<<num1<<" "<<num2<<endl;
return 0;
}
원하는 결과는 30 20 입니다.
진짜 결과는 20 30 으로 나옵니다.
1 답변
-
스왑 함수가 잘못 만들어져 있습니다. 질문의 코드는 a, b라는 지역 변수인 int형 포인터 변수를 만든 후에, 함수내에서 a, b 두 포인터 변수에 저장된 주소값을 바꾸어 주고 있습니다.
실제로 해야하는 것은 초기에 주어진 주소값을 통해서, 각 주소에 해당하는 메모리에 저장되어 있는 값들을 바꾸어 주어야 합니다. 메모리에 접근하기 위해서 *연사자를 사용해야 하고요. 아래 코드 참고하세요.
- 코드
#include <iostream> using namespace std; void my_swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } int main() { int num1 = 20, num2 = 30; my_swap(&num1, &num2); cout << num1 << " " << num2 << '\n'; }
- 결과
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력