구조체 배열과 포인터
사용자가 정의한 자료형인 구조체를 이용한 배열, 포인터 선언 및 사용 방법에 대해 알아보겠다.
구조체도 자료형이기 때문에 배열과 포인터 사용이 가능 하며 일반 변수와는 조금 다르게 맴버 접근 연산자를 통해
구조체의 맴버 변수를 접근 하는 방법을 잘 봐두길 바란다.
구조체 배열 |
구조체의 배열을 선언하는 방법은 아래와 같다.
struct human person[3]; |
구조체 배열을 사용 하는 방법은 아래와 같다.
... int main(void) { ... preson[0].age = 10; .... printf(" %s is %d year old \n", person[0].name, person[0].age ); .... } |
위와 같이 3개의 배열중 어떤 값을 접근 할 지 정하는 배열 위치 person[0] .. [2] 위치 그리고 각 배열 구조체의 맴버 변수를
접근하는 person[0].name ... person[0].age ( 맴버 연산자 혹은 맴버 접근 연산자 ) 가 있다.
구조체 포인터 |
구조체 포인터를 사용 하는 방법은 아래와 같다.
... int main(void) { ... pPerson = &person[0]; pPerson->age = 13; strcpy( pPerson->name, "sujan" ); printf(" %s is %d year old \n", pPerson->name, pPerson->age ); .... } |
위와 같이 구조체의 포인터에 해당 구조체 값이 있는 변수의 주소를 연결 시켜 준다.
포인터 구조체의 맴버 변수를 접근하는 person->name ... person->age ( 맴버 연산자 혹은 맴버 접근 연산자 ) 가 있다.
일반 구조체 맴버 연산자 |
포인터 구조체 맴버 연산자 |
. |
-> |
EX) car.speed = 90 ; | EX) pCar->speed = 90; |
구조체 정의 및 선언, 사용방법 내용이 담긴 소스를 보면서 마무리 하겠다.
#include <stdio.h> #include <string.h> struct human { char name[50]; // 이름 int age; // 나이 }; int main() { struct human person[3]; struct human *pPerson = NULL; person[0].age = 10; person[1].age = 11; person[2].age = 12; memset( &person[0].name, 0x00, sizeof(person[0].name) ); // 이름 변수 초기화 memset( &person[1].name, 0x00, sizeof(person[1].name) ); // 이름 변수 초기화 memset( &person[2].name, 0x00, sizeof(person[1].name) ); // 이름 변수 초기화 strcpy( person[0].name, "jack" ); strcpy( person[1].name, "mike" ); strcpy( person[2].name, "call" ); printf("\n===========================배열 접근=========================\n"); printf(" %s is %d year old \n", person[0].name, person[0].age ); printf(" %s is %d year old \n", person[1].name, person[1].age ); printf(" %s is %d year old \n", person[2].name, person[2].age ); printf("\n===========================포인터 접근=========================\n"); pPerson = &person[0]; pPerson->age = 13; strcpy( pPerson->name, "sujan" ); printf(" %s is %d year old \n", pPerson->name, pPerson->age ); pPerson = &person[1]; printf(" %s is %d year old \n", pPerson->name, pPerson->age ); pPerson = &person[2]; printf(" %s is %d year old \n\n", pPerson->name, pPerson->age ); } |
'프로그램 > C' 카테고리의 다른 글
[C] 문자 입출력 함수 getchar(), putchar() (0) | 2017.09.29 |
---|---|
[C] 줄바꿈 종류 [ 라인피드(LF), 캐리지 리턴(CR)] (0) | 2017.09.27 |
[C] 구조체 (0) | 2017.07.24 |
[C] 포인터와 상수(const) (0) | 2017.07.23 |
[C] Call-By-Value와 Call-By-Reference (0) | 2017.07.22 |