Menu
Coddy logo textTech

포인터를 통한 변수 수정

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) 방식으로는 단순히 달성할 수 없는 강력한 프로그래밍 가능성을 열어줍니다.

challenge icon

챌린지

쉬움

정수의 값을 3배로 만드는 함수를 생성하여 포인터를 통해 변수를 수정하는 방법을 보여주는 C 프로그램을 작성하세요.

프로그램은 다음을 수행해야 합니다:

  1. 정수에 대한 포인터를 매개변수로 받는 tripleValue라는 이름의 함수를 생성합니다.
  2. tripleValue 함수 내부에서 역참조 연산자를 사용하여 해당 메모리 주소의 값을 3배로 곱합니다.
  3. tripleValue 함수 내부에서 새로운 값을 Value tripled to: [value] 형식으로 출력합니다.
  4. main 함수에서 number라는 이름의 정수 변수를 선언하고 8로 초기화합니다.
  5. 원래 값을 Original value: [value] 형식으로 출력합니다.
  6. 주소 연산자를 사용하여 number 변수의 주소를 전달하며 tripleValue 함수를 호출합니다.
  7. 함수 호출 후, 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;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Logic & Flow의 모든 레슨