본문 바로가기
카테고리 없음

구조체 포인터 사용법 & 예제 총정리

by kangs' tong 2023. 9. 6.

구조체 포인터란?

구조체 포인터는 구조체 변수를 가리키는 포인터이다. 구조체 변수의 주소를 저장하고 해당 구조체 변수에 접근하기 위해 사용된다. 포인터를 사용하여 구조체에 접근하면 구조체의 멤버 변수에 접근하여 값을 변경하거나 메모리를 할당할 수 있다.

구조체 포인터 선언 및 초기화 방법

구조체 포인터를 선언하려면 구조체의 타입과 포인터를 나타내는 * 기호를 사용한다. 구조체 포인터를 초기화하기 위해서는 malloc() 함수를 사용하여 메모리를 동적으로 할당해야 한다.

// 구조체 정의
struct Person {
    char name[50];
    int age;
};

// 구조체 포인터 선언 및 초기화
struct Person *personPtr;
personPtr = (struct Person *) malloc(sizeof(struct Person));

구조체 포인터를 통한 멤버 변수 접근

구조체 포인터를 사용하여 멤버 변수에 접근하기 위해서는 -> 연산자를 사용한다.

// 멤버 변수에 접근하기 위한 구조체 포인터의 사용
personPtr->age = 25;
printf("나이: %d\n", personPtr->age);

구조체 포인터를 인자로 받는 함수

구조체 포인터를 인자로 받는 함수를 정의할 때에는 해당 함수에서 구조체의 멤버 값을 변경할 수도 있으므로, 구조체 포인터를 const로 선언하여 읽기 전용으로 사용하는 것이 좋다.

void printPerson(const struct Person *p) {
    printf("이름: %s\n", p->name);
    printf("나이: %d\n", p->age);
}

int main() {
    struct Person person;
    personPtr = &person;

    printPerson(personPtr);

    return 0;
}

구조체 포인터의 메모리 해제

구조체 포인터가 가리키는 메모리를 해제하기 위해서는 free() 함수를 사용한다.

free(personPtr);

구조체 포인터 사용 예제

아래는 구조체 포인터를 사용하여 Person 구조체로부터 객체를 동적으로 생성하고, 멤버 변수에 접근하여 값을 설정하는 예제이다.

#include <stdio.h>
#include <stdlib.h>

struct Person {
    char name[50];
    int age;
};

void initializePerson(struct Person *person, const char *name, int age) {
    strcpy(person->name, name);
    person->age = age;
}

void printPerson(const struct Person *person) {
    printf("이름: %s\n", person->name);
    printf("나이: %d\n", person->age);
}

int main() {
    struct Person *personPtr;
    personPtr = (struct Person *) malloc(sizeof(struct Person));

    initializePerson(personPtr, "홍길동", 20);
    printPerson(personPtr);

    free(personPtr);

    return 0;
}

구조체 포인터는 구조체 변수에 접근하고 조작하는 데 유용한 도구이다. 적절한 초기화와 메모리 해제를 통해 포인터를 안전하게 사용할 수 있다. 이를 통해 코드의 유연성을 높일 수 있고, 동적으로 메모리를 할당하여 크기가 정해지지 않은 데이터를 효율적으로 다룰 수 있다.

댓글