달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

구조체 포인터라고 해서 다를 것 없다.

int형 포인터 변수를 선언하듯이 선언하면 되고, int형 포인터를 통해서 접근하듯이 접근하면 된다.


-구조체 포인터

함수의 인자로 기본자료형 변수와 마찬가지로 구조체 변수도 포인터로 전달 할 수 있다.

이렇게 함수 내부에서 외부에 있는 구조체 변수에 직접 접근하기 위해 구조체 포인터를 쓴다.

구조체 변수의 포인터 선언 방식과 매개변수로 구조체 포인터를 선언하는 방식은 일반적은 변수의 포인터 선언규칙을 그대로 적용하면 된다.

또한 구조체 변수의 주소 값을 얻을 때고 & 연산자를 사용한다.


-포인터를 이용한 구조체 멤버의 접근

(*구조체_포인터).멤버 

여기에서 (*구조체_포인터)는 구조체 변수를 의미하게 된다.

멤버에 접근하는 데 ( )가 필요한 이유는 .연산자보다 *연산자의 우선순위가 낮기 때문이다.

그런데 포인터를 이용한 구조체 멤버의 접근을 간단히 처리하는 -> 연산자가 있는 데 다음과 같은 방식으로 접근이 가능하다.

구조체_포인터->멤버

즉, "(*구조체_포인터).멤버"는 "구조체_포인터->멤버"와 완전히 동일한 연산문이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <string.h>
 
#define NAME_LEN    30
#define    PID_LEN        15
 
typedef struct _person
{
    char name[NAME_LEN]; //이름
    char ID[PID_LEN]; //주민등록 번호
    unsigned int age; //나이
}person;
 
void ShowPersonData(person * ptr)
{
    printf("이름: %s \n", (*ptr).name);
    printf("주민등록번호: %s \n", (*ptr).ID);
    printf("나이: %u \n", ptr->age);
}
 
int main(void)
{
    person A_youjin = { "안유진""920720-2587412"24 };
    person * personPtr = &A_youjin;
 
    
    ShowPersonData(personPtr);
 
    while (1);
}
cs



:
Posted by youjin.A