swap함수 전역변수로는 안되나요,,

조회수 510회

include

int a,b;

void swap(int a, int b);

int main() {

scanf("%d %d",&a,&b);

if(a>b) swap(a,b);
printf("%d %d", a,b);
for(int i=a;i<=b;i++)
    printf("%d ",i);}

void swap(int a, int b){ int temp; temp=a; a=b; b=temp; }

swap할 때 call by reference 방식을 사용해야 해서 포인터를 사용해야 하는걸로 알고있는데요. 대신 전역변수를 사용하면 어차피 값의 내용이 메모리에 저장되는거라 올바르게 swap 되어야 하는거 아닌가요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 어떤 함수의 매개변수를 일반 변수 형태로 작성한 경우에는 기본적으로 값에 의한 전달이 발생합니다.

    지금 작성하신 swap 함수가 void swap(int x, int y)와 같이 매개변수가 일반 변수 형식이므로, 메인함수 등에서 실제로 swap(a,b)의 형태로 사용하게 되면 swap 함수의 지역변수인 x에는 a의 값이 전달됩니다. a가 지역변수든, 전역변수든 상관이 없이 a의 값이 x라는 변수에 초기화 됩니다.

    스왑함수는, C언어에서는 포인터를 이용해서 void swap(int* px, int* py)으로 스왑 함수를 만들 수 있고, C++언어에서는 C언의 방식을 포함하여 void swap(int& x, int& y)와 같이 스왑함수를 만들수도 있습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

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

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

(ಠ_ಠ)
(ಠ‿ಠ)