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)
와 같이 스왑함수를 만들수도 있습니다.-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력