티스토리 뷰

C

[C] 구조체와 공용체

tonirr 2021. 5. 8. 22:51
  • 함수와 구조체
    • 함수에서의 구조체 사용
      • 구조체를 함수의 매개변수로 사용
        • 일반변수를 함수의 매개변수로 사용하는 것과 동일
        • 매개변수가 구조체인 경우 함수의 형식매개변수를 구조체로 선언
        • 해당 구조체 전체가 복사되기 때문에 편리
        • 구조체 전체가 복사되기 때문에 시간이 많이 걸리고 기억공간의 낭비가 심하다.
      • 구조체 포인터를 함수의 매개변수로 사용
        • 일반적으로 구조체 포인터를 함수의 매개변수로 사용
        • 구조체를 복사하지 않기 때문에 실행속도가 향상되고 기억공간의 사용효율도 좋다.
  • typedef
    • 이미 존재하는 자료형에 새로운 이름을 붙이기 위한 키워드
      • 간단하거나 의미있는 이름으로 바꿀 수 있어 프로그램 이해가 쉽다.
      • 구조체 형을 선언하는데 많이 사용
      • 형식
        • typedef 기존 자료형 새로운 자료형이름;
      • 사용예
        • typedef int INT;
    • typedef의 사용
      • typedef unsigned int BYTE;
        • undigned int형을 BYTE라는 새로운 이름으로 정의
      • BYTE val;
        • 컴파일러가 unsigned int val로 해석
      • typedef int * PTR;
        • int *를 PTR로 재정의
      • PTR p1, p2;
        • int *p1, *p2를 의미
  • 구조체의 비트필드
    • 구조체의 비트필드(bit field)
      • 주기억장치의 기억공간을 byte 단위가 아닌 bit 단위로 사용
        • 프로그램 시 bit 단위의 연산이 필요한 경우 int형 변수를 사용
        • 이 때 int형은 4byte(32 bit)이므로 1bit를 제외한 31 bit의 기억공간이 낭비
      • 구조체의 비트필드를 사용하면
        • 기억공간을 절약하고
        • 더욱 융통성 있는 데이터 구조체를 만들 수 있다.
      • 구조체 비트필드의 정의
        • struct 비트필드명 { 자료형 비트필드 변수: 비트크기;};
        • struct nibble {.unsigned a:1; unsigned b:2; unsigned c:1; };
          • a, b, c는 각각 1 bit, 2 bit, 3 bit 비트크기를 가짐
      • 구조체 비트필드의 선언 예와 기억공간 구조
      • 구조체 비트필드 참조에서의 주의사항
        • 비트필드의 자료형은 int나 unsigned로 선언
        • 비트필드에 대한 포인터나 배열은 사용안됨
        • 비트필드의 전체 크기는 시스템이 제공하는 int의 크기 이내여야 함
      • 구조체 비트필드의 기억공간 구조
        • 비트필드의 총 수가 int의 크기보다 클경우
          • 비트필드가 2개의 int 사이에 걸쳐 저장될 수 없다.
  • 공용체의 개념
    • 공용체(union)란?
      • 동일한 기억장소에 여러 유형의 자료를 저장하기 위해서 프로그래머가 선언한 자료형
      • 공용체 안에 포함된 자료들이 같은 기억장소를 공유하여 사용
      • 사용될 자료의 자료형이 유동적일 경우 기억공간을 효율적으로 사용할 수 있는 장점
    • 공용체의 예
      • 공용체의 멤버들이 완전히 다른 자료형을 가질 때 기억공간을 절약하기 위해 사용
      • 예) 급여관리 프로그램에서
        • 원화로 월급을 지급받는 사람: 정수형으로 처리
        • 달러로 월급을 지급받는 사람: 실수형으로 처리
        • 이러한 경우, 공용체를 사용하면 필요에 따라 메모리의 자료형을 선택해서 값을 저장 가능
    • 공용체 변수의 선언
      • 형식
        • union 공용체명 변수명;
      • 사용 예
        • union var abc;
    • 공용체 정의와 변수 선언 예
      • union var {.char a; int b; float c; };
      • union var abc;
  • 공용체의 사용
    • 공용체가 사용되면
      • 공용체의 멤버 중에서 자료크기(byte 수)가 가장 큰 멤버에 대해서만 기억공간이 할당됨
      • 기억 공간의 시작 위치부터 각 부분을 다른 멤버가 공용으로 사용
    • 공용체 변수의 참조 예
      • union hold {.short int digit; double big; char letter; };
      • union hold fit;
      • fit.digit = 23;  // 23이 저장(2 byte만 사용)
      • fit.big = 1234.567;  // 23이 지워지고 1234.567이 저장됨(8 byte만 사용)
      • fit.letter = 'b';  // 1234.567이 지워지고 'b'가 저장됨(1 byte만 사용)

'C' 카테고리의 다른 글

[C] 구조체  (0) 2021.04.30
[C] 포인터와 배열  (0) 2021.04.27
[c] 포인터  (0) 2021.04.21
[C] 배열  (0) 2021.04.14
[C] 입.출력 함수와 연산자  (0) 2021.03.25
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함