728x90
구조체를 가르키는 포인터
지금까지는 포인터로 변수만을 가르켰다. 포인터는 구조체도 가르킬 수 있다.
구조체 포인터는 다음과 같이 만든다.
1
2
3
4
|
struct student s = {"2291048", "jin", "4.3"};
struct student *p;
p = &s;
|
cs |
구조체 변수 s를 생성하고, student구조체를 가르킬 포인터 p를 만든다. 그리고 포인터 p에 구조체 변수 s의 주소를 넣어준다. 그리고 포인터 p가 가르키는 구조체의 멤버로 접근하려면
1
|
(*p).number
|
cs |
이렇게 '포인터가 가르키는 것'의 멤버 number 혹은
1
|
p->number
|
cs |
간단하게 이렇게 표현해도 된다. 그러면 멤버로 접근하는 간단한 예제를 보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include <Stdio.h>
struct student{
int number;
char name[20];
double grade;
};
int main(void)
{
struct student s = {2291048, "jin", 4.3};
struct student *p;
p = &s;
printf("%d\n", (*p).number);
printf("%d\n", p->number);
return 0;
}
|
cs |
구조체 s를 선언과 동시에 초기화 한 후, 구조체 포인터 p가 s를 가르키게 만든다. (*p), ->를 사용해 멤버를 출력한다.

포인터를 멤버로 가지는 구조체
이번에는 포인터를 멤버로 가지는 구조체의 구조가 어떻게 되는지 살펴보자.
1
2
3
4
5
6
|
struct student{
int number;
char name[20];
double grade;
struct date *dob; //date구조체 포인터 선언
};
|
cs |
구조체 student 정의. 그리고 멤버에 date 구조체를 가르키는 포인터 dob를 선언한다.
1
2
3
4
5
|
struct date{
int month;
int day;
int year;
};
|
cs |
구조체 date 정의. 즉, student구조체에는 date구조체를 가르키는 포인터가 멤버로 있다.
1
2
3
4
|
struct date d = {12, 10, 2022};
struct student s = {2291048, "jin", 4.3};
s.dob = &d;
|
cs |
date구조체 변수를 선언과 동시에 초기화, student구조체 변수를 선언과 동시에 초기화 해준다. 그리고 student구조체의 변수인 s의 멤버인 구조체 포인터인 dob에 date구조체 변수의 주소를 넣는다!
1
2
3
|
printf("%d\n", s.dob -> month);
printf("%d\n", s.dob -> day);
printf("%d\n", s.dob -> year);
|
cs |
출력해보자. s.dob는 구조체 포인터 변수 s가 가지고있는 멤버인 구조체 포인터 dob이다. 이 dob는 date구조체의 변수인 d의 주소를 갖는다.
728x90
'C프로그래밍 > 개인 공부' 카테고리의 다른 글
C언어 - 구조체와 함수 (0) | 2022.12.11 |
---|---|
C언어 - 구조체안에 문자배열? or 문자형을 가르키는 포인터? (0) | 2022.12.11 |
C언어 - 문자열을 정수로, 정수를 문자열로 바꾸기 (0) | 2022.12.10 |
C언어 - 포인터의 기초 (0) | 2022.11.20 |
C언어 - 스트림과 파일 입출력 기초(쓰기와 삭제) (0) | 2022.11.02 |