본문 바로가기

Data Structure [C]/문돌이도 할 수 있는 [C언어 자료구조]

#15 [C 자료구조] 포인터와 구조체

배열을 가리키는 포인터가 있었다면 구조체를 포인터도 당연히 있을 것! 오늘은 구조체를 어떻게 가리키는지 살펴보자.

 

우선 포인터는 이렇게 생성한다.

struct student *ps

구조체 자체를 가리키는 *ps

 

구조체에서 포인터가 사용되는 경우는 두 가지이다.

1) 포인터가 구조체를 가리킴

2) 포인터가 구조체의 멤버가 됨

 

 

1) 포인터가 구조체를 가리킴

struct student s = { 123123, 12341, 1234}
struct student *p
p = &s

이렇게 p는 구조체 s를 가리키는 포인터가 된다.

포인터로 구조체 내 인자들을 가리키는 방법은 다음과 같다.

(1) (*p).name // 멤버 참조 연산자인 . 보다 참조연산자 *의 우선순위가 더 높다

(2) p->name

 

 

2) 포인터가 구조체의 멤버가 됨

struct date {
	int year;
	int month;
	int day;
};
struct student {
	int number;
	char name[20];
	double grade;
	struct date *dd;
};

struct stdent s;
struct date d;
s.dd = &d;

구조체 안에 구조체 넣는 방식 + 포인터 사용법이라고 생각하면 된다.

여기서 s안에 있는 d안에 있는 year을 뽑아내고 싶다면

(1) *(s.dd).year

(2) s.dd->year

두 가지의 방법을 이용하면 된다.