본문 바로가기

Programming/C Language

구조체 ( Structure )

이번 파트에서는 진짜 엄청 중요한 구조체 를 정리할 것이다!


구조체 : 하나 이상의 변수( 포인터 , 배열 포함)들을 묶어서 새로운 자료형을 정의하는 도구


구조체를 이용하면 우리는 새로운 자료형을 정의할 수 있다.

그러면 구조체가 어디에 필요할지 한번 생각해보자 , 

예를들어 위치의 정보를 담는 프로그램을 개발한다고 가정해보자.
위치라는 것은 좌표의 개념으로 x , y 축의 좌표들의 정보를 알아야한다.

그러면 다음과 같이 2개의 변수를 선언해야 한다.
int xpos;        // x좌표

int ypos;        // y좌표


그런데 이 두 변수들은 서로 독립된 정보를 표현하는 것이 아닌 위치리는 하나의 정보를 표현하기 위해 사용되어야 한다.
즉 , 만일 위치를 출력하는 함수가 있다면 그 함수는 x좌표와 y좌표에 저장된 값을 동시에 참조해야 한다.
이 두 변수의 값은 함께 있을때 의미를 지니며 , 이 중 하나가 소멸되면 나머지 하나도 의미가 없어져 버린다.

이렇게 어느 데이터를 표현하기 위해 여러 관련된 변수들을 묶어놓을수 있도록 자료형을 정의하는것이 구조체이다.


다음과 같이 구조체를 정의함으로써 두 변수를 하나로 묶을수 있다.



struct point                       //    point라는 이름의 구조체 정의

{

int xpos;                     //    point 구조체를 구성하는 멤버 xpos

int ypos;                     //    point 구조체를 구성하는 멤버 ypos

};


보이듯 생각보다 간단하다 , 이때 point라는 이름이 int나 double같이 자료형의 이름이 되는 것 이다.


이번엔 사람의 이름 , 핸드폰 번호 , 나이 등 사람의 정보에 대한 data를 묶는 자료형을 예시로 보겠다.


struct person                    //    person이라는 이름의 구조체 정의

{

char name[20];            //    이름 저장을 위한 멤버 name

char phoneNum[20];    //     핸드폰 번호 저장을 위한 멤버 phoneNum

int age;                     //     나이 저장을 위한 멤버 age

}


위 구조체 정의를 보듯 , 배열도 값의 저장이 가능하기때문에 구조체의 멤버가 될 수 있다.


앞서 우리는 point와 person이라는 구조체를 정의하였다.
자료형을 정의하였으니 이제는 이 자료형들을 대상으로 변수를 선언해보자!

struct point pos;                //     point구조체의 변수 pos 선언

struct person man;             //     person구조체의 변수 man 선언


pos와 man을 '구조체 변수'라고 한다.


선언법은 다음과 같다.                    struct  구조체명  구조체변수명

위와 같이 구조체 변수들을 선언하면 다음의 형태를 지닌다.

     pos                                   


xpos

ypos 


    man

 name

 phoneNum

 age


다음과 같이 pos라는 구조체 변수는 xpos와 ypos로 이루어져있고 ,     man이라는 구조체 변수는 name , phoneNum , age 로 이루어져있다.
그렇다면 구조체 변수의 멤버에 접근법을 알아보자


만일 pos구조체 변수의 xpos라는 멤버에 20이라는 값을 저장하고 싶다면 다음과 같이 문장을 구성한다.
    pos.xpos = 20;        //구조체 변수 pos의 멤버 xpos에 20 저장

이렇게 구조체 변수의 멤버에 접근할때는 .(Dot) 연산자를 이용한다.
그러면 지금까지 설명한 내용을 기반으로 다음 글에서 구조체 예제를 공부해보자

'Programming > C Language' 카테고리의 다른 글

typedef 선언  (0) 2017.11.01
구조체 예제  (0) 2017.11.01
문자,문자열 관련 함수  (0) 2017.11.01
다차원 배열  (0) 2017.11.01
Call By Value & Call By Reference  (0) 2017.11.01