값에 의한 전달
Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 25번째.
C 언어에서 함수로 변수를 전달할 때, 함수는 변수 자체가 아니라 그 변수 값의 복사본을 받습니다. 이 근본적인 개념을 값에 의한 전달(pass-by-value)이라고 합니다.
다음과 같은 일이 일어납니다: 값이 10인 변수 x가 있고 이를 함수에 전달하면, 함수는 해당 값의 별도 복사본을 갖게 됩니다. 함수가 이 복사본에 가하는 어떠한 변경 사항도 호출한 함수에 있는 원래 변수에는 영향을 미치지 않습니다.
void tryToChange(int num) {
num = 99; // 이것은 복사본만 변경합니다
}
int main() {
int x = 10;
tryToChange(x);
// x는 여전히 10이며, 99가 아닙니다
return 0;
}이 동작은 함수에 의해 원본 데이터가 실수로 수정되는 것을 방지합니다. 하지만, 이는 함수가 실제로 변수의 값을 변경하기를 원한다면 값에 의한 전달(pass-by-value) 방식으로는 작동하지 않는다는 것을 의미하기도 합니다. 포인터와 포인터가 이 문제를 어떻게 해결할 수 있는지 배우는 과정에서 이러한 제약 사항을 이해하는 것은 매우 중요합니다.
챌린지
쉬움함수 내부에서 변수를 수정하려고 시도하고 원본 변수가 변경되지 않은 상태로 유지되는 것을 관찰함으로써 값에 의한 전달(pass-by-value) 개념을 보여주는 C 프로그램을 작성하세요.
프로그램은 다음을 수행해야 합니다:
number라는 정수 매개변수를 받는tryToModify라는 이름의 함수를 만듭니다.tryToModify함수 내부에서number매개변수에 50을 더합니다.tryToModify함수 내부에서 수정된 값을Inside function: [value]형식으로 출력합니다.main함수에서original이라는 이름의 정수 변수를 선언하고 25라는 값으로 초기화합니다.- 함수를 호출하기 전에 원본 값을
Before function call: [value]형식으로 출력합니다. tryToModify함수를 호출하고original변수를 인수로 전달합니다.- 함수 호출 후,
original의 값을 다시After function call: [value]형식으로 출력합니다.
출력 결과는 함수 내부의 수정에도 불구하고 원본 변수의 값이 변경되지 않은 상태로 유지됨을 보여주어야 합니다:
Before function call: 25
Inside function: 75
After function call: 25이 챌린지는 함수가 변수 자체가 아니라 변수의 복사본을 받는 C 언어의 값에 의한 전달(pass-by-value)이라는 기본 개념을 보여줍니다. 함수 내부에서 매개변수에 가해진 모든 수정 사항은 호출한 함수의 원본 변수에 영향을 미치지 않습니다.
치트 시트
C 언어에서 함수는 변수 자체가 아니라 변수 값의 복사본을 전달받습니다. 이를 값에 의한 전달(pass-by-value)이라고 합니다.
변수를 함수에 전달할 때, 함수 내부에서 이루어진 모든 변경 사항은 복사본에만 영향을 미치며, 원래 변수는 변경되지 않은 상태로 유지됩니다:
void tryToChange(int num) {
num = 99; // 이 코드는 복사본만 변경합니다
}
int main() {
int x = 10;
tryToChange(x);
// x는 여전히 10이며, 99가 아닙니다
return 0;
}이러한 동작은 함수에 의해 원본 데이터가 실수로 수정되는 것을 방지하지만, 함수가 실제로 변수의 값을 변경하도록 하려는 경우에는 값에 의한 전달 방식이 작동하지 않음을 의미합니다.
직접 해보기
#include <stdio.h>
// TODO: 여기에 tryToModify 함수를 작성하세요
int main() {
// TODO: 여기에 코드를 작성하세요
// 1. 원본 변수 선언 및 초기화
// 2. 함수 호출 전의 값 출력
// 3. tryToModify 함수 호출
// 4. 함수 호출 후의 값 출력
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.