본문 바로가기

카테고리 없음

구조체 포인터의 사용법과 예제를 한글로 총정리한 제목: 구조체 포인터를 활용한 실용적인 예제와 사용법 안내

1. 구조체 포인터란?

구조체 포인터(structure pointer)는 구조체 변수의 주소를 저장하는 변수이다. 구조체는 여러 개의 데이터를 묶어서 하나의 새로운 자료형을 정의하는데 사용되며, 포인터는 변수의 주소값을 가리키는 변수이다. 따라서, 구조체 포인터는 구조체 변수의 주소를 가리키는 변수로, 구조체의 멤버에 접근하고 조작하는데 사용된다.

구조체 포인터를 사용하면 구조체의 멤버에 더 쉽게 접근할 수 있고, 동적 메모리 할당 등의 작업에 유용하게 사용될 수 있다. 포인터를 통해 구조체에 접근하고 조작하는 방법을 알아보자.

2. 구조체 포인터의 사용법

구조체 포인터를 사용하여 구조체의 멤버에 접근하고 조작하는 방법은 다음과 같다:

2.1. 구조체 포인터 변수 선언

구조체 포인터 변수를 선언할 때는 구조체 자료형 뒤에 *을 붙여야 한다. 아래 예시는 struct Point라는 구조체를 정의하고, 해당 구조체를 가리키는 포인터 변수 p를 선언하는 예시이다:

struct Point {
    int x;
    int y;
};

struct Point* p;  // 구조체 포인터 변수 선언

2.2. 포인터 변수에 주소 할당

구조체 포인터 변수에 구조체 변수의 주소를 할당하기 위해 주소 연산자 &를 사용한다. 아래 예시에서는 struct Point 형식의 변수 point를 선언하고, 이 변수의 주소를 구조체 포인터 변수 p에 할당하는 예시이다:

struct Point point;  // 구조체 변수 선언
p = &point;  // 구조체 변수의 주소 할당

2.3. 구조체 멤버에 접근

구조체 포인터를 사용하여 구조체의 멤버에 접근하기 위해서는 화살표 연산자 ->를 사용한다. 아래 예시는 p가 가리키는 구조체의 x 멤버와 y 멤버에 접근하는 예시이다:

p->x = 10;  // x 멤버에 값 할당
p->y = 20;  // y 멤버에 값 할당

2.4. 구조체 멤버 사용

구조체 포인터를 통해 구조체의 멤버에 접근한 후, 해당 멤버를 사용하는 것은 일반 변수와 동일하다. 아래 예시는 p가 가리키는 구조체의 x 멤버와 y 멤버를 더한 값을 출력하는 예시이다:

int sum = p->x + p->y;
printf("Sum: %d", sum);

구조체 포인터를 사용하여 구조체의 멤버에 접근하고 조작하는 방법은 위와 같이 간단하다. 이를 통해 보다 유연하고 동적으로 구조체를 다룰 수 있게 된다.

3. 구조체 포인터를 활용한 실용적인 예제

구조체 포인터를 활용하여 실제로 유용하게 사용되는 몇 가지 예제를 살펴보자.

3.1. 동적 메모리 할당

동적으로 구조체를 생성하기 위해 구조체 포인터와 malloc 함수를 함께 사용할 수 있다. 아래는 struct Person 구조체를 동적으로 생성하고 초기화하는 예제이다:

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

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

int main() {
    struct Person* p = (struct Person*)malloc(sizeof(struct Person));  // 구조체 포인터 동적 할당
    if (p == NULL) {
        printf("메모리 할당 오류\n");
        return 1;
    }

    // 구조체 멤버에 값 할당
    strcpy(p->name, "John Doe");
    p->age = 25;

    // 할당된 구조체의 내용 출력
    printf("Name: %s\n", p->name);
    printf("Age: %d\n", p->age);

    free(p);  // 할당된 메모리 해제

    return 0;
}

3.2. 동적으로 구조체 배열 생성

구조체 배열을 동적으로 생성할 때에도 구조체 포인터를 사용할 수 있다. 아래 예제는 구조체 배열을 동적으로 생성하고 초기화하는 예제이다:

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

struct Point {
    int x;
    int y;
};

int main() {
    int size;
    printf("배열의 크기를 입력하세요: ");
    scanf("%d", &size);

    struct Point* points = (struct Point*)malloc(size * sizeof(struct Point));  // 구조체 포인터로 구조체 배열 동적 할당
    if (points == NULL) {
        printf("메모리 할당 오류\n");
        return 1;
    }

    for (int i = 0; i < size; i++) {
        printf("점의 x 좌표를 입력하세요: ");
        scanf("%d", &points[i].x);

        printf("점의 y 좌표를 입력하세요: ");
        scanf("%d", &points[i].y);
    }

    printf("입력한 점의 좌표:\n");
    for (int i = 0; i < size; i++) {
        printf("(%d, %d)\n", points[i].x, points[i].y);
    }

    free(points);  // 할당된 메모리 해제

    return 0;
}

위의 예제에서는 사용자로부터 구조체 배열의 크기를 입력받고, 해당 크기만큼 구조체 배열을 동적으로 할당한다. 그 후 사용자로부터 각 점의 좌표를 입력받아 구조체 배열에 저장하고, 입력한 좌표를 출력한다.

구조체 포인터를 통해 동적으로 구조체를 생성하거나 구조체 배열을 생성하는 등의 작업을 할 수 있는데, 이는 프로그램의 유연성과 자원 활용을 개선하는 데 도움이 된다.