구조체 포인터란?
구조체 포인터(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를 통해 화살표 연산자로 각 멤버 값이 정상적으로 출력되는 것을 확인할 수 있습니다.