함수에 포인터 전달하기
Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 26번째.
이제 값에 의한 전달(pass-by-value)의 한계를 이해했으므로, 함수에 포인터를 전달하는 것이 어떻게 이 문제를 해결하는지 살펴봅시다. 변수 값의 복사본을 전달하는 대신, 변수의 메모리 주소를 함수에 전달할 수 있습니다.
포인터를 함수에 전달하면, 함수는 메모리 내 원본 변수의 위치에 접근할 수 있게 됩니다. 이는 함수가 단순히 데이터의 복사본이 아니라 원본 데이터를 직접 다룰 수 있음을 의미합니다.
void processValue(int *ptr) {
// ptr은 원본 변수의 주소를 가집니다
// 이제 함수는 해당 메모리 위치에 접근할 수 있습니다
}
int main() {
int x = 10;
processValue(&x); // x의 주소를 전달합니다
return 0;
}함수를 호출할 때 변수의 주소를 전달하기 위해 주소 연산자 &를 사용하는 방식을 확인해 보세요. 함수 매개변수는 int *ptr로 선언되어 있으며, 이는 정수에 대한 포인터를 받을 것임을 나타냅니다. 이 근본적인 기술은 함수가 프로그램의 데이터와 상호작용할 수 있는 강력한 가능성을 열어줍니다.
챌린지
쉬움포인터를 함수에 전달하는 방법을 보여주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:
- 정수에 대한 포인터를 매개변수로 받는
displayValue라는 이름의 함수를 생성합니다. displayValue함수 내부에서 역참조 연산자를 사용하여 메모리 주소의 값에 접근하고, 다음 형식으로 출력합니다:Value at address: [value]main함수에서number라는 이름의 정수 변수를 선언하고 42로 초기화합니다.- 원본 값을 다음 형식으로 출력합니다:
Original value: [value] - 주소 연산자를 사용하여
number변수의 주소를displayValue함수에 전달하며 호출합니다. - 함수 호출 후, 확인 메시지를 출력합니다:
Function call completed
출력 결과는 함수가 원본 변수의 메모리 주소를 성공적으로 전달받고 접근했음을 보여주어야 합니다:
Original value: 42
Value at address: 42
Function call completed이 챌린지는 포인터를 함수에 전달하는 핵심 개념을 소개합니다. 이를 통해 함수는 값의 복사본을 작업하는 대신 원본 변수의 메모리 위치에 직접 접근할 수 있게 됩니다.
치트 시트
포인터를 함수에 전달할 때, 함수는 값의 복사본 대신 원래 변수의 메모리 위치에 대한 접근 권한을 받습니다.
변수의 주소를 함수에 전달하려면 주소 연산자 &를 사용하세요:
void processValue(int *ptr) {
// ptr은 원래 변수의 주소를 보유합니다
// 이제 함수는 해당 메모리 위치에 접근할 수 있습니다
}
int main() {
int x = 10;
processValue(&x); // x의 주소를 전달합니다
return 0;
}함수 매개변수는 정수에 대한 포인터를 받을 것임을 나타내기 위해 int *ptr로 선언됩니다.
직접 해보기
#include <stdio.h>
// TODO: 여기에 displayValue 함수를 작성하세요
int main() {
// TODO: 여기에 코드를 작성하세요
// 1. number 변수를 선언하고 초기화합니다
// 2. 원래 값을 출력합니다
// 3. displayValue 함수를 호출합니다
// 4. 완료 메시지를 출력합니다
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.