구조체 포인터 사용법 & 예제 총정리
구조체 포인터란?
구조체 포인터는 구조체의 주소값을 저장하는 변수를 말합니다. 구조체 포인터를 사용하면 구조체 멤버에 접근하거나 구조체를 동적으로 할당할 수 있습니다.
구조체 포인터 변수 선언 및 초기화
구조체 포인터 변수를 선언하려면 구조체 이름 뒤에 *
기호를 붙입니다. 변수를 선언할 때 기본적으로 초기값을 설정해주어야 합니다.
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;
}
이 예제는 사용자로부터 이름과 나이를 입력받아 구조체에 저장한 후 출력하는 프로그램입니다.
결론
구조체 포인터를 사용하면 구조체의 동적 할당과 멤버에 접근하는 작업을 쉽게 수행할 수 있습니다. 구조체 포인터를 활용하여 메모리를 효율적으로 관리할 수 있는 프로그램을 개발할 수 있습니다.
댓글