참고한 사이트
양손에 공을 들고 있는 상황에서, 그 공들을 서로 교환하기란 어렵다.
교환하기 위해서는 오른쪽이든 왼쪽이든 둘 중 한 공은 어딘가에 내려 둔 후 공을 반대편으로 옮겨야 한다.
이렇듯 프로그래밍에서도 두 값을 교환할 때, 임시 변수
를 만들어 값을 잠시 담아두는 과정을 거치게 된다.
#include <iostream>
int main()
{
int a = 1;
int b = 2;
std::cout << "swap 전" << '\n';
std::cout << "a : " << a << ", "<< "b : " << b << '\n' << '\n';
int temp = a; // int temp : 임시 변수
a = b;
b = temp;
std::cout << "swap 후" << '\n';
std::cout << "a : " << a << ", " << "b : " << b;
return 0;
}
[결과]
swap 전
a : 1, b : 2
swap 후
a : 2, b : 1
#include <iostream>
int main()
{
char arr[8] = "reverse";
std::cout << "swap 전 : " << arr << '\n';
return 0;
}
[결과]
swap 전 : reverse
int len = 6; // arr[index] = arr[len] = arr[NULL-1]
len = 6
char temp;
// swap
for(int i = 0; i < len; len--, i++) {
temp = arr[len];
arr[len] = arr[i];
arr[i] = temp;
}
#include <iostream>
int main()
{
char arr[8] = "reverse";
std::cout << "swap 전 : " << arr << '\n';
int len = 6;
char temp;
// swap
for(int i = 0; i < len; len--, i++) {
temp = arr[len];
arr[len] = arr[i];
arr[i] = temp;
}
std::cout << "swap 후 : " << arr << '\n';
return 0;
}
[결과]
swap 전 : reverse
swap 후 : esrever
#include <iostream>
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
int main()
{
int a = 1;
int b = 2;
std::cout << "swap 전" << '\n';
std::cout << "a : " << a << ", "<< "b : " << b << '\n' << '\n';
swap(a, b);
std::cout << "swap 후" << '\n';
std::cout << "a : " << a << ", " << "b : " << b;
return 0;
}
[결과]
swap 전
a : 1, b : 2
swap 후
a : 1, b : 2
swap을 했는데, 전과 후의 결과가 똑같은 이유 :
값만 넘겨줬기 때문
main() 함수에서의 값이 외부 함수에 영향을 주기 위해서는 값만 넘겨주지 말고, 값의 메모리 주소를 넘겨줘서
외부 함수에서 a, b에 접근할 수 있도록 할 것!
#include <iostream>
// swap
// 2. int *a = &a, int *b = &b
void swap(int *a, int *b) {
// temp에는 a에 저장된 주소가 가리키는 값이 저장
int temp = *a;
// 그 값에는 다시 b에 저장 주소가 가리키는 값이 저장
*a = *b;
*b = temp;
}
int main()
{
int a = 1;
int b = 2;
std::cout << "swap 전" << '\n';
std::cout << "a : " << a << ", "<< "b : " << b << '\n' << '\n';
swap(&a, &b); // 1. a, b의 주소값을 swap() 함수에 전달
std::cout << "swap 후" << '\n';
std::cout << "a : " << a << ", " << "b : " << b;
return 0;
}
[결과]
swap 전
a : 1, b : 2
swap 후
a : 2, b : 1