Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 구조체 포인터 완벽 정리: 실전 예제로 배우는 선언과 화살표 연산자

구조체 포인터란?

구조체 포인터(pointer to structure)는 하나의 구조체 전체를 가리키는 메모리 주소를 저장하는 포인터입니다. 주로 연결 리스트(linked list), 트리(tree), 그래프(graph)처럼 노드 간 연결이 필요한 복잡한 자료구조를 구현할 때 핵심적으로 활용됩니다.

일반 구조체 변수에서는 점(.) 연산자로 멤버에 접근하지만, 구조체 포인터에서는 화살표 연산자(->)라는 특수 연산자를 사용해야 합니다.

선언 방법

구조체 포인터는 다음 형식으로 선언합니다.

struct tagname *ptr;

예를 들어, 학생(student) 구조체를 가리키는 포인터는 아래와 같이 선언할 수 있습니다.

struct student *s;

멤버 접근 방법

화살표 연산자(->)를 사용하면 포인터가 가리키는 구조체의 멤버에 바로 접근할 수 있습니다.

Ptr->membername;

예를 들어 다음과 같이 사용합니다.

s->sno;   // 학번 접근
s->sname; // 이름 접근
s->marks; // 점수 접근

예제 프로그램

다음은 구조체 포인터를 활용한 C 프로그램 전체 코드입니다.

#include<stdio.h>
struct student{
    int sno;
    char sname[30];
    float marks;
};
main ( ){
    struct student s;
    struct student *st;
    printf("enter sno, sname, marks:");
    scanf ("%d%s%f", &s.sno, s.sname, &s.marks);
    st = &s;
    printf ("details of the student are");
    printf ("Number = %d\n", st ->sno);
    printf ("name = %s\n", st->sname);
    printf ("marks =%f\n", st ->marks);
    getch ( );
}

코드 동작 원리

  • st = &s; : 구조체 변수 s의 시작 주소를 포인터 st에 저장합니다.
  • st->sno : 포인터 st가 가리키는 구조체의 sno 멤버 값을 읽어 출력합니다.
  • st->sno(*st).sno 또는 s.sno와 동일한 의미이며, 화살표 연산자가 역참조와 멤버 접근을 한 번에 처리해 코드를 더 간결하게 만들어 줍니다.

실행 결과

위 프로그램을 컴파일하고 실행하면 다음과 같은 결과가 출력됩니다.

enter sno, sname, marks:1 priya 34
details of the student areNumber = 1
name = priya
marks =34.000000

사용자가 입력한 학번(1), 이름(priya), 점수(34)가 구조체에 저장되고, 포인터 st를 통해 화살표 연산자로 각 멤버 값이 정상적으로 출력되는 것을 확인할 수 있습니다.