구조체 배열과 포인터


사용자가 정의한 자료형인 구조체를 이용한 배열, 포인터 선언 및 사용 방법에 대해 알아보겠다.

구조체도 자료형이기 때문에 배열과 포인터 사용이 가능 하며 일반 변수와는 조금 다르게 맴버 접근 연산자를 통해

구조체의 맴버 변수를 접근 하는 방법을 잘 봐두길 바란다.


구조체 배열


구조체의 배열을 선언하는 방법은 아래와 같다.

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 );

}



반응형

+ Recent posts