산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C 구조체와 포인터 마스터하기: 실전 가이드

C 구조체와 포인터 마스터하기: 실전 가이드

포인터로 구조체 멤버를 탐색하고, 유연한 C 자료구조를 위한 동적 메모리 할당을 학습하세요.

구조체와 포인터를 다루기 전에 다음 기초 주제를 숙지하세요:


포인터로 구조체 참조하기

구조체를 선언하고 이를 참조하는 포인터를 선언하는 간결한 예제입니다.

struct Person {
    int member1;
    int member2;
    /* 추가 멤버들 */
};
int main(void) {
    struct Person *ptr, harry;
    /* ptr은 이제 아무 Person 인스턴스나 가리킬 수 있음 */
}

이 스니펫에서 ptr은 struct Person 인스턴스를 가리키는 포인터입니다.


예제: 포인터를 통한 구조체 멤버 접근

포인터로 구조체 필드를 읽거나 쓰려면 -> 연산자를 사용합니다.

#include <stdio.h>
struct Person {
    int age;
    float weight;
};
int main(void) {
    struct Person *personPtr, person1;
    personPtr = &person1; /* person1 가리키기 */
    printf("나이 입력: ");
    scanf("%d", &personPtr->age);
    printf("몸무게 입력: ");
    scanf("%f", &personPtr->weight);
    printf("\n출력:\n");
    printf("나이: %d\n", personPtr->age);
    printf("몸무게: %f", personPtr->weight);
    return 0;
}

여기서 personPtr = &person1;은 person1의 주소를 personPtr에 저장합니다. 이후 personPtr->field 접근은 (*personPtr).field와 동일하며 간결한 문법을 제공합니다.


구조체 동적 메모리 할당

컴파일 타임에 필요한 구조체 인스턴스 수를 알 수 없을 때, C 표준 라이브러리를 사용해 런타임에 메모리를 할당합니다.

예제: 구조체 배열 할당

#include <stdio.h>
#include <stdlib.h>
struct Person {
    int age;
    float weight;
    char name[30];
};
int main(void) {
    struct Person *ptr;
    int i, n;
    printf("사람 수 입력: ");
    scanf("%d", &n);
    ptr = (struct Person*)malloc(n * sizeof(struct Person));
    if (!ptr) {
        fprintf(stderr, "Memory allocation failed\n");
        return EXIT_FAILURE;
    }
    for (i = 0; i < n; ++i) {
        printf("이름과 나이를 각각 입력: ");
        scanf("%s %d", (ptr + i)->name, &(ptr + i)->age);
    }
    printf("\n정보 출력:\n");
    for (i = 0; i < n; ++i) {
        printf("Name: %s\tAge: %d\n", (ptr + i)->name, (ptr + i)->age);
    }
    free(ptr);
    return 0;
}

프로그램 실행 결과:

사람 수 입력: 2
이름과 나이를 각각 입력: Harry 24
이름과 나이를 각각 입력: Gary 32
정보 출력:
Name: Harry	Age: 24
Name: Gary	Age: 32

이 예제는 struct Person 인스턴스 n개를 힙에 생성하고, 사용자 입력을 각 인스턴스에 읽어들인 뒤 결과를 출력하는 방법을 보여줍니다.

C 언어

  1. C# 키워드와 식별자 이해: 규칙, 목록, 모범 사례
  2. C# 클래스와 객체: 견고한 OOP를 위한 기초 다지기
  3. C# 추상 클래스와 추상 메서드: 실전 가이드
  4. C# partial 클래스와 partial 메서드 이해하기
  5. C# sealed 클래스와 메서드: 상속/오버라이딩 제한으로 코드 안전성·성능 높이기
  6. C# 구조체(Struct) 이해하기: 정의, 사용법, 클래스와의 핵심 차이
  7. C 키워드와 식별자: 실전 가이드
  8. C 포인터 마스터하기: 실전 중심 전문가 가이드
  9. C 언어에서 배열과 포인터의 관계 이해하기
  10. C 프로그래밍: 주소와 포인터를 함수에 전달하기 – 실전 가이드