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

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

by nono22 2023. 12. 5.

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

구조체 포인터란?

구조체 포인터는 구조체의 주소값을 저장하는 변수를 말합니다. 구조체 포인터를 사용하면 구조체 멤버에 접근하거나 구조체를 동적으로 할당할 수 있습니다.

구조체 포인터 변수 선언 및 초기화

구조체 포인터 변수를 선언하려면 구조체 이름 뒤에 * 기호를 붙입니다. 변수를 선언할 때 기본적으로 초기값을 설정해주어야 합니다.

struct MyStruct {
  int num;
  char ch;
};

struct MyStruct* ptr;  // 구조체 포인터 변수 선언
ptr = malloc(sizeof(struct MyStruct));  // 동적 메모리 할당

구조체 멤버에 접근하기

구조체 포인터를 사용하여 구조체 멤버에 접근하려면 -> 연산자를 사용합니다.

(*ptr).num = 10;  // 구조체 포인터를 역참조하여 멤버에 접근

ptr->ch = 'A';  // -> 연산자를 사용하여 멤버에 직접 접근

구조체 동적 할당 및 해제

구조체 포인터를 사용하여 동적으로 구조체를 할당하려면 malloc 함수를 사용합니다. 할당한 메모리는 사용이 끝났을 때 free 함수를 사용하여 해제해야 합니다.

ptr = malloc(sizeof(struct MyStruct));  // 동적 메모리 할당

// ...

free(ptr);  // 동적 메모리 해제

구조체 포인터 배열

구조체 포인터를 배열로 선언하여 여러 개의 구조체 포인터를 한 번에 다룰 수 있습니다.

struct MyStruct* ptrArr[5];  // 구조체 포인터 배열 선언

for (int i = 0; i < 5; i++) {
  ptrArr[i] = malloc(sizeof(struct MyStruct));  // 동적 메모리 할당
}

// ...

for (int i = 0; i < 5; i++) {
  free(ptrArr[i]);  // 동적 메모리 해제
}

예제

아래는 구조체 포인터를 사용하여 동적으로 구조체를 할당하고, 멤버에 접근하는 예제입니다.

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

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

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

  if (personPtr == NULL) {
    printf("Memory allocation failed!\n");
    return 1;
  }

  printf("Enter name: ");
  scanf("%s", personPtr->name);

  printf("Enter age: ");
  scanf("%d", &(personPtr->age));

  printf("Name: %s, Age: %d\n", personPtr->name, personPtr->age);

  free(personPtr);

  return 0;
}

이 예제는 사용자로부터 이름과 나이를 입력받아 구조체에 저장한 후 출력하는 프로그램입니다.

결론

구조체 포인터를 사용하면 구조체의 동적 할당과 멤버에 접근하는 작업을 쉽게 수행할 수 있습니다. 구조체 포인터를 활용하여 메모리를 효율적으로 관리할 수 있는 프로그램을 개발할 수 있습니다.

댓글