데이비드 J. 마란 :의은에 프로그램을 작성하자 우리는 값을 교환하려고하는 두 변수 x와 y. 사전에, 내가 많이 썼어요 이미이 프로그램의. 첫째, 변수, X를 선언, 그리고, 거기에 1 값을 저장합니다. 그럼 난 변수 Y를 선언하고 거기에 값 2를 저장합니다. 그런 다음 표시 할 printf의 진행 두 변수의 값. 다음 나는 다른 printf와 함께 주장 이러한 변수를 교환합니다. 그럼 난 스왑이라는 함수를 호출합니다. 그리고 제가 주장하는 변수 교체되었다. 그리고 나서 출력이 내가 주장 x와 y의 새로운 값입니다. 이제이 기능 스왑은 무엇입니까? 그것은 C. 함께 제공 게 아니에요 사실, 우리는 상단에 보면 내 파일, 내가 선언 한 것을 알 수 있습니다 이 기능 스왑에 대한 프로토 타입 이 두 개의 정수를 취하도록 지정 임의로 및 B라고하고,이 함수는 아무 것도 반환하지 않습니다. 그래서 아마도 그것은 말하는가 스왑의와 b의 값에. 의 지금 스왑을 구현 할 수 있습니다. 첫째, 임시을 선언하는거야 변수와 그것에 할당 의 값은,하지만 난 그냥 할 수 쉽게 그것 B에 저장된다. 나는 그 값을 변경하는거야 의 B에서와 동일합니다. 그리고 마지막으로, 나는 변화거야 B의 값은 어떤 것이었지만입니다 될 지금 온도에서. 지금은 그냥 무슨 짓을했는지 주장 논리적으로 올바른 것입니다. 나는, 임시 변수에 저장 한 다음 B 형의 될 수있는 값을 변경하고, 무엇의이었다로 B의 값을 변경. 하지만 컴파일하고이 프로그램을 실행할 때 프로그램은 그게 아니에요 걱정 내가 보는 것. 더 스왑을하지 않습니다. 점은, 아니 스왑을 슬래시가 없습니다. 그리고 불행하게도, printf의에 따르면, x 및 y의 값에도 우리는 교환 할 것을 주장 후 그들은 여전히​​ 1, 2입니다. 이제 그 이유는? 글쎄요, 그것은 밝혀 그 주에, 때 우리 전달이 기능 스왑을 호출 인수로 x 및 y, 실제로의 정보 x와 y의 사본이 스왑으로 전달됩니다. 즉, 그 값 1과 2는 A와 B로 스왑에 전달. 그리고 그것은 우리가 궁극적으로있어 A와 B의 주에 교환. 즉, 2가 1이되고, 1은 2가되고있다. 하지만 스왑은 반환 값이 없기 때문에 하고 있기 때문에 X의 사본을 수신 와 y, 그것은 문제가있다의 x와 y에 영향이 없습니다. 실제로, 및 B는 말하자면 범위된다 x와 y가 남아있는 반면, 교환하는 메인으로 범위. 그래서 우리는 문제가있다. 하지만 어떻게 그것을 해결하기 위해?