포인터를 통한 변수 수정
Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 27번째.
이제 포인터의 진정한 힘을 활용할 수 있습니다: 함수를 통해 원본 변수를 수정하는 것입니다. 함수에 포인터를 전달하면, 함수는 역참조 연산자(dereference operator)를 사용하여 해당 메모리 주소에 저장된 값을 변경할 수 있습니다.
함수 내부에서 * 연산자를 사용하여 포인터를 역참조함으로써 원본 변수의 값에 접근하고 수정합니다. 이 기법은 변수의 메모리 위치에 대한 참조를 전달하기 때문에 참조에 의한 전달(pass-by-reference)이라고 불립니다.
void doubleValue(int *ptr) {
*ptr = *ptr * 2; // 원래 값을 수정하기 위해 역참조합니다
}
int main() {
int x = 5;
doubleValue(&x); // x의 주소를 전달합니다
// x는 이제 10입니다!
return 0;
}핵심은 할당문의 왼쪽에 *ptr을 사용하여 포인터가 가리키는 메모리 주소의 값을 수정하는 것입니다. 이를 통해 함수는 호출한 함수의 변수를 영구적으로 변경할 수 있으며, 이는 값에 의한 전달(pass-by-value) 방식으로는 단순히 달성할 수 없는 강력한 프로그래밍 가능성을 열어줍니다.
챌린지
쉬움정수의 값을 3배로 만드는 함수를 생성하여 포인터를 통해 변수를 수정하는 방법을 보여주는 C 프로그램을 작성하세요.
프로그램은 다음을 수행해야 합니다:
- 정수에 대한 포인터를 매개변수로 받는
tripleValue라는 이름의 함수를 생성합니다. tripleValue함수 내부에서 역참조 연산자를 사용하여 해당 메모리 주소의 값을 3배로 곱합니다.tripleValue함수 내부에서 새로운 값을Value tripled to: [value]형식으로 출력합니다.main함수에서number라는 이름의 정수 변수를 선언하고 8로 초기화합니다.- 원래 값을
Original value: [value]형식으로 출력합니다. - 주소 연산자를 사용하여
number변수의 주소를 전달하며tripleValue함수를 호출합니다. - 함수 호출 후,
number의 최종 값을Final value: [value]형식으로 출력합니다.
출력 결과는 함수가 포인터를 통해 원래 변수를 성공적으로 수정했음을 보여주어야 합니다:
Original value: 8
Value tripled to: 24
Final value: 24이 챌린지는 포인터를 사용한 참조에 의한 전달(pass-by-reference)의 강력함을 보여줍니다. 함수는 포인터를 역참조하고 해당 메모리 위치의 값을 변경함으로써 원래 변수를 영구적으로 수정할 수 있습니다.
치트 시트
포인터를 사용하여 함수를 통해 원래 변수를 수정할 수 있습니다. 이 기술은 메모리 내 변수 위치에 대한 참조를 전달하기 때문에 참조에 의한 전달(pass-by-reference)이라고 불립니다.
함수 내부에서 * 연산자를 사용하여 포인터를 역참조함으로써 원래 변수의 값에 접근하고 수정합니다:
void doubleValue(int *ptr) {
*ptr = *ptr * 2; // 원래 값을 수정하기 위해 역참조
}
int main() {
int x = 5;
doubleValue(&x); // x의 주소를 전달
// x는 이제 10입니다!
return 0;
}할당문의 왼쪽에 *ptr을 사용하여 포인터가 가리키는 메모리 주소의 값을 수정합니다. 이를 통해 함수는 호출한 함수의 변수를 영구적으로 변경할 수 있습니다.
직접 해보기
#include <stdio.h>
// TODO: 여기에 tripleValue 함수를 작성하세요
int main() {
// TODO: 여기에 코드를 작성하세요
// number 변수를 선언하고 초기화하세요
// 원래 값을 출력하세요
// tripleValue 함수를 호출하세요
// 최종 값을 출력하세요
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.