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

조회수 45회

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 답변

  • 좋아요

    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)와 같이 스왑함수를 만들수도 있습니다.

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

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.