구조체 기본개념
구조체란?
▷ 서로 다른 데이터형의 정보를 집합시킨 것으로 복잡한 데이터를 단일변수처럼 처리할 수 있는 복합 데이터형이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> struct Person { char name[20]; int age; double height; }; int main() { struct Person x, y; x = { "brenden", 27, 180.0 }; y = x; return 0; } | cs |
- 3 line ~ 8 line : 구조체 형틀 선언부 (Compiler에게 정보를 준다.)
- 12 line : 구조체 변수 x,y 선언 (0차원 변수)
- 13 line : 구조체형 멤버변수 초기화
- 14 line : 단일변수처럼 활용해서 초기화
** Person Memory 할당 그림
구조체 성질
- 구조체 형틀 선언 시에는 메모리 할당이 되지 않는다. but! 구조체 변수 선언시 실제 메모리가 할당
- 1의 성질 때문에, 구조체형틀 선언 시 멤버를 초기화하는 것은 불가능하다.
- 멤버참조연산자(.)를 사용한다.
구조체 Member일 경우
- Student가 Person 구조체를 포함하는 관계로 총 36 Byte 크기(4B + 32B)이다.
- 19 line : 구조체 안에 구조체이므로 -> { , { }} 의 모양으로 초기화한다.
구조체 배열
- Case 1 : p는 1차원 변수
- Case 2 : sp는 1차원 포인터
- p[0].name == (sp+0)->name == sp->name == sp[0].name == (*(sp+0)).name
- 위의 5가지가 같은 표현인 것을 익숙해져야 한다.
구조체 포인터
간접멤버참조 연산자 (->)를 사용한다.
※ 구조체변수명 . 구조체 Member
(0차원) (0~n차원)
※ 구조체변수의 시작주소 -> 구조체 Member
(1차원 주소) (0~n차원)
구조체 함수로 전달
- 3 line : typedef 구형명 새형명;
- 17 line : 변수의 주소(4바이트), 구조체 포인터변수를 전달을 통해 속도가 18line 함수보다 빠르다.
- 18 line : 변수를 전달한다. 계속 32바이트를 전달해주기 때문에 속도가 17line 함수보다 느리다.
자기참조 구조체
자기참조 구조체란?
▷ 구조체 멤버 중에 자기 자신을 가리키는 포인터를 포함하고 있는 구조체로, 주로 Linked List를 구성할 때 사용된다.
|
|
||||||
자기참조 구조체 |
에러나는 구조체 (2번째 줄 사이즈 구할 수 없다) |
자기참조 구조체 활용 (Double Linked List)
이후 포스팅 주소 참고
공용체(union) 및 나열형(enum)
공용체란?
▷ 공용체(union)는 각 멤버를 한 공간에 할당하여 선택적으로 사용하게 한다.
공용체에서 모든 멤버는 같은 시작번지를 갖으며, 가장 큰 멤버의 크기만큼만 기억장소를 할당 받는다.
|
|||
long형이 가장 크기 때문에 4B만큼 크기 할당된다. |
나열형(enumerated type)란?
▷ 정수상수를 기호 이름으로 선언해서 사용하거나 정수기호상수를 저장하는 변수를 선언하여 사용할 수 있다.
정수기호상수를 사용하면 가독성을 높일 수 있다.
- 2 line : #define KOREA (0) 한 효과로 0에서 2까지의 숫자를 뜻한다.
- 10 line : enum 선언 시 지정한 상수값 만 저장가능 하다.
- 11 line : x = 0; 로 선언할 시 에러 발생한다.
'C언어' 카테고리의 다른 글
[C언어] 구조체 (정리5) (0) | 2018.02.09 |
---|---|
[C언어] 포인터 (정리4) (0) | 2018.02.07 |
[C언어] 배열 (정리3) (0) | 2018.02.06 |
[C언어] 데이터형 (정리2) (0) | 2018.02.06 |
[C언어] Preview (정리1) (0) | 2018.02.02 |