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