구조체 포인터 사용하기 참고 문헌 (Ch 49) : https://dojang.io/mod/page/view.php?id=418
구조체 포인터를 선언하고 메모리 할당하기 다른 자료형과 마찬가지로 malloc 함수를 이용하여 동적 메모리 할당 할당하는 방법: struct 구조체이름 (*포인터이름) = malloc(sizeof(struct 구조체 이름)); 예시
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 #include <stdio.h> #include <string.h> // strcpy 함수가 선언된 헤더 파일 #include <stdlib.h> // malloc, free 함수가 선언된 헤더 파일 struct Person { char name[20 ]; int age; char address[100 ]; }; int main () { struct Person *p1 = malloc (sizeof (struct Person )); strcpy (p1->name, "홍길동" ); p1->age = 30 ; strcpy (p1->address, "서울시 용산구 한남동" ); printf ("이름: %s\n" , p1->name); printf ("나이: %d\n" , p1->age); printf ("주소: %s\n" , p1->address); free (p1); return 0 ; }
참고: 구조체의 멤버가 포인터일 때 역참조를 하려면 맨 앞에 *를 붙여야 함. 이 때 구조체 변수 앞에 *가 붙어있더라도 멤버의 역참조이지 구조체 변수의 역참조가 아님. 예시
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 32 #include <stdio.h> #include <stdlib.h> struct Data { char c1; int *numPtr; }; int main () { int num1 = 10 ; struct Data d1 ; struct Data *d2 = malloc (sizeof (struct Data )); d1.numPtr = &num1; d2->numPtr = &num1; printf ("%d\n" , *d1.numPtr); printf ("%d\n" , *d2->numPtr); d2->c1 = 'a' ; printf ("%c\n" , (*d2).c1); printf ("%d\n" , *(*d2).numPtr); printf ("%d\n" , d2->numPtr); printf ("%d\n" , *d2->numPtr); free (d2); return 0 ; }
구조체 별칭으로 포인터를 선언하고 메모리 할당하기 구조체 별칭을 이용하여 구조체 포인터의 메모리 할당 방법: (구조체 별칭) (*포인터 이름) = malloc(sizeof(구조체 별칭)) 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 #include <stdio.h> #include <string.h> // strcpy 함수가 선언된 헤더 파일 #include <stdlib.h> // malloc, free 함수가 선언된 헤더 파일 typedef struct _Person { char name[20 ]; int age; char address[100 ]; } Person; int main () { Person *p1 = malloc (sizeof (Person)); strcpy (p1->name, "홍길동" ); p1->age = 30 ; strcpy (p1->address, "서울시 용산구 한남동" ); printf ("이름: %s\n" , p1->name); printf ("나이: %d\n" , p1->age); printf ("주소: %s\n" , p1->address); free (p1); return 0 ; }
구조체 포인터에 구조체 변수의 주소 할당하기 동적 메모리를 할당하지 않고 구조체 포인터를 사용하는 방법: (구조체 포인터) = (&구조체 변수) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <stdio.h> struct Person { char name[20 ]; int age; char address[100 ]; }; int main () { struct Person p1 ; struct Person *ptr ; ptr = &p1; ptr->age = 30 ; printf ("나이: %d\n" , p1.age); printf ("나이: %d\n" , ptr->age); return 0 ; }