본문 바로가기
언어/C

[C] 구조체

by merona99 2018. 12. 4.
반응형

구조체


구조체 : 하나 이상의 변수를 묶어서 새로운 자료형을 정의하는 도구



<구조체 정의>

struct point

{

int xpos;

int ypos;

};



<구조체 변수 선언>

struct point pos;


구조체 변수를 선언과 동시에 초기화할 때에는 중괄호를 사용

ex)

struct person man={"merona", "010-1234-1234", 20};




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



*구조체 변수의 주소 값 = 구조체 변수의 첫 번째 멤버의 주소 값



typedef 선언

기존에 존재하는 자료형의 이름에 새 이름을 부여하는 것

보통 typedef로 정의되는 자료형의 이름은 대문자로 시작


typedef name1 name2;

name1의 또 다른 이름 name2를 선언


ex)

typedef struct point

{

int xpos;

int ypos;

} Point;



<구조체 이름 생략>            //흔하게 사용

typedef struct

{

char name[20];

char phoneNum[20];

int age;

} Person;



구조체 변수를 대상으로 Call-by-reference



구조체 변수를 대상으로 가능한 연산

- 대입연산, &연산, sizeof 연산


구조체 변수의 연산



공용체


<공용체 정의>

typedef union ubox

{

int mem1;

int mem2;

double mem3;

} UBOX;



<변수선언의 경우>

구조체 = 구조체를 구성하는 멤버 각각에 할당

공용체 = 그 중 크기가 가장 큰 멤버의 변수만 하나 할당되어 이를 공유


ex)

13행 - 상위 4바이트의 메모리 공간에 20을 저장

14행 - mem2는 int형으로 상위 4바이트의 메모리 공간을 참조하게 됨 

   근데 앞에 13행에서 이 공간에 20을 저장했으므로 20을 출력

16행 - mem3에 실수 저장. 결과적으로 13행을 통해 저장된 값을 덮어쓰게됨

17, 18행 - 16행에서 실수를 저장하면서 덮어써버렸기 때문에, 

  상위 4바이트를 읽어서 출력하면 알 수 없는 값이 출력됨


즉, 메모리 공간을 공유



열거형


<열거형 정의>

enum syllable

{

q=1, w=2, e=3, r=4

};


q는 정수 1을 의미하는 상수로 정의함

이 값은 syllable형 변수에 저장이 가능함


<변수선언>

enum syllable tone;



열거형의 유용함 : 둘 이상의 연관이 있는 이름을 상수로 선언함으로써 프로그램의 가독성을 높임


반응형

'언어 > C' 카테고리의 다른 글

[C] 메모리 관리 & 동적 할당  (0) 2019.01.09
[C] 파일 입출력  (0) 2018.12.07
[C] 문자 & 문자열 관련 함수  (0) 2018.11.15
[C] 도전프밍_3 (&난수)  (0) 2018.11.15
[C] 함수 포인터와 void 포인터  (0) 2018.11.13

댓글