구조체의 정의


구조체는 하나 이상의 변수( 포인터변수와 배열 포함) 을 묶어서 새로운 자료형을 정의하는 도구이다. 두가지 이상의 변수가 함께있을때만 의미를 지닐때, 이 변수들을 묶어서 표현하기위해 등장한 것이 구조체이다.


구조체의 선언


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

{

int xpos;

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

};

struct person

{

char name[20];

char phoneNum[20];

int age;

};


이때 point는 int 와 double 과 같은 자료형의 이름이 된다. 이렇게 기본 자료형 변수를 묶어서 새로운 자료형을 만든것을 사용자 정의 자료형(user defined data type) 라고 한다.


구조체 변수의 선언과 접근


struct type_name val_name

ex ) struct point pos;


접근방식은 구조체변수의이름.구조체멤버의이름 이다.

ex) pos.xpos =1;


구조체 변수의 초기화


struct point pos ={10,20};

struct person man={"이승기","010-1212-0001",21}; // 선언과 동시에 초기화할때는 문자열 저장을위해 strcpy 함수를 호출하지않아도된다.


구조체 배열의 선언과 접근


struct point arr[4]; // 구조체 배열의 선언

arr[i].xpos; // 구조체 배열의 접근


구조체 배열의 초기화


struct person arr[3]={

{"이승기","010-1212-0001",21},

{"정지영","010-1313-0002",22},

{"한지수","010-1717-0003",19}

};


구조체 변수와 포인터


struct point * pptr =&pos; //포인터 변수 pptr이 구조체변수 pos를 가리킴

(*pptr).xpos =10; // 포인터 변수 pptr 을 이용해서 pos의 멤버에 접근

pptr->xpos =10; // 위와 동일한 문장이다.


포인터변수를 구조체의 멤버로 선언


struct circle

{

double radius;

struct point * center;

};

int main(void)

{

struct point cen={2,7};

double rad =5.5;

struct circle ring={rad,&cen};

printf"원의 중심 : [%d,%d]",(ring.center)->xpos,(ring.center)->ypos);

}


TYPE형 구조체 변수의 멤버로 TYPE형 포인터 변수를 둘 수 있다.


struct point

{

int xpos;

int ypos;

struct point * ptr; // 구조체 point 의 포인터변수 선언

}


* 구조체 변수의 주소값은 구조체 변수의 첫번째 멤버의 주소값과 동일하다.


typedef 선언


typedef 선언을 추가하면 구조체변수를 선언할때 , struct 키워드를 생략할 수 있다.


typedef선언은 기존에 존재하는 자료형의 이름에 새 이름을 부여하는것을 목적으로 하는 선언이다.

ex) typedef int INT // 자료형의 이름 int에 INT라는 새로운 이름을 부여한다.

INT num; // int num; 과 동일한선언


typedef name1 name2 name3 일때 , name3가 새로운 이름이된다.

ex) typedef unsigned int * PTR_UINT // PTR_UINT num; 과 unsigned int * num; 은 동일한 선언이다.


typedef로 정의되는 자료형의 이름은 대문자로 시작하는것이 관례이다.


구조체의 정의와 typedef 선언


typedef struct point // point는 Point 를 선언했을때 생략가능하다

{

int xpos;

int ypos;

}Point; // struct point 형의 새로운 자료형이름 Point

Point pos; 


함수로의 구조체변수 전달과 반환


void ShowPosition ( Point pos ) // 인자로 Point 형 구조체변수 전달

{

printf( "[%d,%d] \n",pos.xpos,pos.ypos)

}

Point GetCurrentPosition(void)

{

Point cen;

scanf("%d %d",&cen.xpos,&cen.ypos);

return cen;

}

+ Recent posts