값에 의한 호출 예제 — swap 함수·임시 변수 temp·복사본 매개변수 | 기초 C언어 10.2.2-1

기초 C언어Chapter 10 포인터 › Section 02 포인터 변수와 포인터의 활용

10.2.2-1 값에 의한 호출 예제

두 값을 맞바꾸는 swap 함수로 다시 확인하는 값에 의한 호출. 함수 안에서는 교환되지만 main의 원본 x·y는 그대로인 까닭.

교재 수록 위치
교재
『기초 C언어』 · 이은상 · 부크크 · 364쪽
단원
Chapter 10 포인터 › Section 02 포인터 변수와 포인터의 활용 › 값에 의한 호출 예제
쪽수
306p ~ 307p2쪽
세부 내용
값에 의한 호출 예제 · CODE 10.4 · 동작 순서 · 원본을 바꾸려면 주소 전달
학습 목표
값에 의한 호출로 만든 swap 함수가 원본 변수를 바꾸지 못하는 까닭을 복사본 매개변수의 동작으로 설명함
영상 목차 · 원하는 부분부터 보기
  1. 0:00 · 강의 소개와 값에 의한 호출
  2. 1:06 · swap 예제와 실행 결과
  3. 3:14 · 임시 변수로 두 값 교환
  4. 5:06 · 호출 시 값 복사와 원본 유지
  5. 7:47 · 원본 수정에 주소가 필요한 이유
  6. 8:36 · 핵심 정리

019장에서 남긴 값에 의한 호출의 한계교재 306p

  • 9.2.3에서 add_ten에 넘긴 변수는 호출 뒤에도 값이 그대로였음. 값에 의한 호출로는 원본 변수의 값을 수정할 수 없다는 확인.
  • 값에 의한 호출 — 변수 자체가 아니라 변수에 저장된 값만 복사하여 전달하는 방식. 매개변수를 바꾸어도 main의 원본은 바뀌지 않음.
  • 앞 편에서 포인터로 다른 변수의 값을 바꾸는 방법을 익힘. 이번 편은 그 필요성을 두 값을 맞바꾸는 swap 함수로 다시 확인하는 단계.

02CODE 10.4 — 값을 넘기는 swap교재 306p

  • swap 함수는 int형 매개변수 a, b를 받아 두 값을 서로 교환. main 함수는 x를 10, y를 20으로 초기화한 뒤 swap(x, y);를 호출하고 전후의 값을 출력.
  • 실행 결과는 ‘바꾸기 전 x: 10, y: 20’과 ‘바꾼 후 x: 10, y: 20’. swap을 호출했는데도 두 줄의 값이 같음. 상세 코드는 교재 CODE 10.4.
  • 호출 전 출력, swap 호출, 호출 후 출력의 짜임. 호출 전과 후의 x·y를 견주어 원본이 바뀌었는지 확인하는 구성.

03임시 변수 temp를 거친 교환교재 307p

  • 교환은 세 단계. a의 값을 temp에 담고, b의 값을 a에 넣고, temp의 값을 b에 넣음.
  • temp 없이 a에 b를 바로 넣으면 a의 원래 값이 사라짐. 값을 잠시 담아 두는 세 번째 변수가 필요한 이유.
단계tempab
교환 전—1020
temp = a;101020
a = b;102020
b = temp;102010

04호출할 때 복사되는 값교재 307p

  • swap(x, y)를 호출하면 x와 y 자체가 아니라 x의 값 10과 y의 값 20이 복사되어 전달. 매개변수 a에는 10, b에는 20이 저장됨.
  • swap 안에서 a는 20, b는 10으로 바뀜. 함수 안의 교환 자체는 정상으로 이루어진 것.
  • main의 x·y와 swap의 a·b는 서로 다른 메모리 공간. 9.2.3의 복사기 비유처럼 복사본에 적은 내용은 원본 문서에 옮겨지지 않음.

05a와 b는 복사본교재 307p

  • a와 b는 x와 y의 복사본이므로 main의 x, y에는 영향을 주지 않음.
  • swap 함수가 종료되면 매개변수 a와 b는 바뀐 값과 함께 사라짐. main으로 돌아오면 x는 여전히 10, y는 여전히 20.

함수 안의 교환이 틀린 것이 아님

swap의 세 문장은 a와 b를 올바르게 맞바꿈. 문제는 교환 대상이 원본이 아니라 복사본이라는 점. 코드를 고쳐도 값만 넘기는 한 원본은 바뀌지 않으므로, 전달하는 것 자체를 바꾸어야 함.

06원본을 바꾸려면 주소를 전달교재 307p

  • 함수 안에서 main의 x와 y를 직접 바꾸려면 변수의 값이 아니라 변수의 주소를 전달해야 함. 10.1.1에서 값 대신 집 주소를 알려 주면 원본을 고칠 수 있다고 한 바로 그 방법.
  • 주소를 전달하는 데 쓰는 것이 포인터이며, 주소를 담는 포인터 변수는 10.2.1에서 이미 다룸. 다음 편에서는 swap(&x, &y)로 주소를 넘기는 참조에 의한 호출을 살펴볼 예정.

이 절의 핵심 정리

  1. 값에 의한 호출은 변수 자체가 아니라 변수에 저장된 값만 복사하여 함수에 전달한다.
  2. swap(x, y)를 호출하면 x의 값 10과 y의 값 20이 매개변수 a와 b에 복사된다.
  3. swap 함수 안에서는 임시 변수 temp를 거쳐 a와 b의 값이 서로 바뀐다.
  4. a와 b는 복사본이므로 함수가 종료되면 사라지고 main의 x와 y는 그대로 남는다.
  5. 함수 안에서 원본 변수를 직접 바꾸려면 값이 아니라 변수의 주소를 전달해야 한다.
강의 자료10.2.2-1 값에 의한 호출 예제 1 / 11

번호를 누르면 해당 장으로 바로 이동합니다 · 방향키 ← → 로도 넘길 수 있습니다
다음 절 · 10.2.2-2 참조에 의한 호출 교재 307p~310p — 값 대신 변수의 주소를 함수에 전달해 원본을 직접 바꾸는 참조에 의한 호출 ↗

더 자세한 내용은 교재에서

이 글은 『기초 C언어』 306p~307p의 내용을 강의 영상에 맞춰 핵심만 간추린 요약입니다. 각 개념의 상세한 설명과 예제, 실습 코드, 임용시험 기출문제 풀이는 교재에서 다루고 있습니다.

댓글

이 블로그의 인기 게시물

2007년 국가직 9급 기계일반 기출문제 풀이

기계공작법 연습문제 130문 | 임용 기출 영상·교재 쪽수 바로가기