C언어 - 구조체와 포인터

2022. 12. 10. 21:21·C프로그래밍/개인 공부

구조체를 가르키는 포인터

 

 

지금까지는 포인터로 변수만을 가르켰다. 포인터는 구조체도 가르킬 수 있다.

구조체 포인터는 다음과 같이 만든다.

1
2
3
4
struct student s = {"2291048", "jin", "4.3"};
struct student *p;
 
p = &s;
Colored by Color Scripter
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;
}
Colored by Color Scripter
cs

 

구조체 s를 선언과 동시에 초기화 한 후, 구조체 포인터 p가 s를 가르키게 만든다. (*p), ->를 사용해 멤버를 출력한다.

출력결과가 같은 것을 볼 수 있다.

 포인터를 멤버로 가지는 구조체

 

이번에는 포인터를 멤버로 가지는 구조체의 구조가 어떻게 되는지 살펴보자. 

 

1
2
3
4
5
6
struct student{
    int number;
    char name[20];
    double grade;
    struct date *dob; //date구조체 포인터 선언
};
Colored by Color Scripter
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의 주소를 갖는다.

출력결과

 

'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
'C프로그래밍/개인 공부' 카테고리의 다른 글
  • C언어 - 구조체와 함수
  • C언어 - 구조체안에 문자배열? or 문자형을 가르키는 포인터?
  • C언어 - 문자열을 정수로, 정수를 문자열로 바꾸기
  • C언어 - 포인터의 기초
Jminu
Jminu
  • Jminu
    뇌 구조가 바이너리
    Jminu
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C프로그래밍
        • 오류해결
        • 개인 공부
        • Programming Lab(학교수업)
        • MemoryTracker
      • C++
        • 개인 공부
      • 자료구조(Data Structure)
      • ARM arch
        • Cortex-M
        • FreeRTOS
      • 컴퓨터 공학(Computer Science)
        • OS
        • 컴퓨터 구조
      • Qualcomm 기업과제
      • Linux
      • Web
      • 똥글
      • 백준
      • Git 학습
        • 오류해결
        • 학습중
      • Python
        • 오류해결
        • 개인 공부
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    드라이버 분석
    rubik pi
    자료구조
    백준
    커널
    파일 입출력
    INIT
    Qualcomm
    시스템콜
    c언어
    동적메모리
    rubikpi3
    arm
    포인터
    피보나치
    순환
    버퍼
    앤드류모튼
    yolo
    commit
    C++
    파이썬
    스택
    Git
    토발즈
    이진 트리
    Branch
    리눅스
    소수
    커널 기여
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Jminu
C언어 - 구조체와 포인터
상단으로

티스토리툴바