본문 바로가기
프로그래밍/C

[C] 7. C언어의 "포인터"

by iwbap 2024. 6. 13.
728x90

C 언어 학습: 포인터

포인터는 C 언어에서 매우 중요한 개념으로, 메모리 주소를 다루는 데 사용됩니다. 이번 글에서는 포인터 개념, 포인터와 배열, 포인터와 문자열, 그리고 포인터와 함수(함수 포인터)에 대해 알아보겠습니다.


1. 포인터 개념

포인터는 변수의 메모리 주소를 저장하는 변수입니다. 포인터를 선언하려면 변수 자료형 앞에 *를 붙입니다. 포인터의 기본 사용법은 다음과 같습니다.

[c]
 
#include <stdio.h>

int main() {
    int var = 10;
    int *ptr = &var; // 포인터 ptr은 변수 var의 주소를 저장

    printf("var의 값: %d\n", var);
    printf("ptr이 가리키는 값: %d\n", *ptr); // 포인터를 통해 변수 var의 값에 접근

    return 0;
}
 

위의 예제에서 int *ptr은 정수를 가리키는 포인터를 선언합니다. &var는 변수 var의 주소를 반환합니다. *ptr을 통해 포인터가 가리키는 변수의 값에 접근할 수 있습니다.


2. 포인터와 배열

배열의 이름은 배열의 첫 번째 요소의 주소를 가리키는 포인터로 해석됩니다. 배열과 포인터의 관계는 다음과 같습니다.

[c]
 
#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int *ptr = arr; // 배열 이름은 첫 번째 요소의 주소를 가리킴

    for (int i = 0; i < 5; i++) {
        printf("arr[%d] = %d, *(ptr + %d) = %d\n", i, arr[i], i, *(ptr + i));
    }

    return 0;
}
 

위의 예제에서 int *ptr = arr은 배열 arr의 첫 번째 요소의 주소를 ptr에 저장합니다. *(ptr + i)를 통해 배열의 요소에 접근할 수 있습니다.


3. 포인터와 문자열

문자열은 문자 배열로 표현되며, 문자열을 가리키는 포인터를 사용할 수 있습니다. 문자열과 포인터의 사용 예는 다음과 같습니다.

[c]
 
#include <stdio.h>

int main() {
    char str[] = "Hello, World!";
    char *ptr = str; // 문자열 포인터

    printf("문자열: %s\n", ptr);

    // 포인터를 사용하여 각 문자 출력
    while (*ptr != '\0') {
        printf("%c", *ptr);
        ptr++;
    }
    printf("\n");

    return 0;
}
 

위의 예제에서 char *ptr = str은 문자열 str의 첫 번째 문자의 주소를 ptr에 저장합니다. *ptr을 통해 각 문자에 접근하고, ptr++을 통해 다음 문자로 이동합니다.


4. 포인터와 함수 (함수 포인터)

함수 포인터는 함수의 주소를 저장하는 포인터입니다. 이를 통해 함수를 호출할 수 있으며, 함수 포인터의 사용 예는 다음과 같습니다.

[c]
 
#include <stdio.h>

// 함수 선언
int add(int a, int b) {
    return a + b;
}

int multiply(int a, int b) {
    return a * b;
}

int main() {
    int (*func_ptr)(int, int); // 함수 포인터 선언

    func_ptr = add; // add 함수의 주소를 함수 포인터에 저장
    printf("add(3, 4) = %d\n", func_ptr(3, 4)); // 함수 포인터를 사용하여 함수 호출

    func_ptr = multiply; // multiply 함수의 주소를 함수 포인터에 저장
    printf("multiply(3, 4) = %d\n", func_ptr(3, 4)); // 함수 포인터를 사용하여 함수 호출

    return 0;
}
 

위의 예제에서 int (*func_ptr)(int, int)은 두 개의 정수를 매개변수로 받고 정수를 반환하는 함수 포인터를 선언합니다. func_ptr에 add 함수와 multiply 함수의 주소를 각각 할당하여, 함수 포인터를 통해 해당 함수를 호출할 수 있습니다.


이번 글에서는 C 언어의 포인터에 대해 알아보았습니다. 포인터는 메모리 주소를 직접 다루는 강력한 도구로, C 언어에서 중요한 역할을 합니다. 다음 시간에는 구조체와 포인터에 대해 자세히 다뤄보겠습니다. C 언어 학습에 많은 도움이 되길 바랍니다. Happy Coding!

728x90