c++ 포인터 swap 문제

조회수 398회

기초적인 문제인데요~ 포인터 주소를 서로 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 답변

  • 좋아요

    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';
    }
    
    • 결과

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 감사합니다 제가 무엇을 잘못 인지했는지 깨달았습니다! 얌 냠 2022.1.9 21:32

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)