Temp를 사용한 일반적인 스왑 함수 대신에 다른 형태로 구현해 보았다.
결론부터 말하자면 최적화 측면에서 의미가 없다 (오히려 안 좋다).
일단 구현방법부터 살펴보자.
스왑함수에서 inum2의 값을 inum1으로 바꾼다 (*p2=n1).
Inum2의 기존 값은?? Inum2에서는 지워지지만, 이 것이 스왑함수의 매겨변수 n2에 들어있다.
따라서 이 n2의 값을 inum1에 넣어주면 된다. 다만 n2의 지역변수 이므로 swap의 반환형으로 전달하면 된다.
즉, n2의 값을 받은 swap의 반환형이 temp의 역할을 하는 셈이다.
얼핏 보면,
- 변수 하나를 덜 쓰는 것(temp) 처럼 보이지만, 인자가 하나 더 생겼으므로 (*p2) 사용하는 변수의 개수가 같다.
-
대입연산을 덜 하는 것 처럼 보이지만 오히려 더 한다.
즉, Temp 초기화(선언 및 대입) 대신에 매개변수 p2초기화 (p2의 선언 및 &inum2를 대입)한다.
또 이 p2의 값을 함수의 반환형에 대입 (int swap()=n2) 하므로 대입연산이 최소 4회 이루어진다.
이상으로 스왑함수의 다른 형태에 대해 알아보았다.
'C언어 업무보고' 카테고리의 다른 글
20140327 02 printf와 scanf의 인자 사용법이 다른 이유는?? (0) | 2014.03.27 |
---|---|
20140327 01 포인터 연산, 주소 1씩 증가시키기 (0) | 2014.03.27 |
20140326 01 과일이름 출력, 반복문, 문자열,배열,포인터 배열 (0) | 2014.03.26 |
20140324 02 재귀함수, recursive (0) | 2014.03.24 |
20140324 01 메모리 구조, 메모리 주소, 코드영역, 데이터영역, BSS 영역, 전역변수, static 변수 (0) | 2014.03.24 |