본문으로 바로가기

[C언어] 구조체 (정리5)

category C언어 2018. 2. 9. 17:59


구조체 기본개념



구조체란?


서로 다른 데이터형의 정보를 집합시킨 것으로 복잡한 데이터를 단일변수처럼 처리할 수 있는 복합 데이터형이다.


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"27180.0 };
    y = x;
 
    return 0;
}
cs

  • 3 line ~ 8 line : 구조체 형틀 선언부 (Compiler에게 정보를 준다.)
  • 12 line : 구조체 변수 x,y 선언 (0차원 변수)
  • 13 line : 구조체형 멤버변수 초기화
  • 14 line : 단일변수처럼 활용해서 초기화


** Person Memory 할당 그림



구조체 성질

  1. 구조체 형틀 선언 시에는 메모리 할당이 되지 않는다. but! 구조체 변수 선언시 실제 메모리가 할당
  2. 1의 성질 때문에, 구조체형틀 선언 시 멤버를 초기화하는 것은 불가능하다.
  3. 멤버참조연산자(.)를 사용한다.

구조체 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를 구성할 때 사용된다.


 

1
2
3
4
5
struct node
{
    int a;
    struct node *ptr;
}

cs

1
2
3
4
5
struct node
{
    int a;
    struct node ptr;
}
cs

 자기참조 구조체

에러나는 구조체 

(2번째 줄 사이즈 구할 수 없다) 


자기참조 구조체 활용 (Double Linked List)


이후 포스팅 주소 참고



공용체(union) 및 나열형(enum)


공용체란?


▷ 공용체(union)는 각 멤버를 한 공간에 할당하여 선택적으로 사용하게 한다.

    공용체에서 모든 멤버는 같은 시작번지를 갖으며, 가장 큰 멤버의 크기만큼만 기억장소를 할당 받는다.


1
2
3
4
5
6
union number
{
    char a;
    short b;
    long c;
} num;
cs


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

댓글을 달아 주세요