티스토리 뷰
- 함수와 구조체
- 함수에서의 구조체 사용
- 구조체를 함수의 매개변수로 사용
- 일반변수를 함수의 매개변수로 사용하는 것과 동일
- 매개변수가 구조체인 경우 함수의 형식매개변수를 구조체로 선언
- 해당 구조체 전체가 복사되기 때문에 편리
- 구조체 전체가 복사되기 때문에 시간이 많이 걸리고 기억공간의 낭비가 심하다.
- 구조체 포인터를 함수의 매개변수로 사용
- 일반적으로 구조체 포인터를 함수의 매개변수로 사용
- 구조체를 복사하지 않기 때문에 실행속도가 향상되고 기억공간의 사용효율도 좋다.
- 구조체를 함수의 매개변수로 사용
- 함수에서의 구조체 사용
- 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를 의미
- typedef unsigned int BYTE;
- 이미 존재하는 자료형에 새로운 이름을 붙이기 위한 키워드
- 구조체의 비트필드
- 구조체의 비트필드(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 사이에 걸쳐 저장될 수 없다.
- 비트필드의 총 수가 int의 크기보다 클경우
- 주기억장치의 기억공간을 byte 단위가 아닌 bit 단위로 사용
- 구조체의 비트필드(bit field)
- 공용체의 개념
- 공용체(union)란?
- 동일한 기억장소에 여러 유형의 자료를 저장하기 위해서 프로그래머가 선언한 자료형
- 공용체 안에 포함된 자료들이 같은 기억장소를 공유하여 사용
- 사용될 자료의 자료형이 유동적일 경우 기억공간을 효율적으로 사용할 수 있는 장점
- 공용체의 예
- 공용체의 멤버들이 완전히 다른 자료형을 가질 때 기억공간을 절약하기 위해 사용
- 예) 급여관리 프로그램에서
- 원화로 월급을 지급받는 사람: 정수형으로 처리
- 달러로 월급을 지급받는 사람: 실수형으로 처리
- 이러한 경우, 공용체를 사용하면 필요에 따라 메모리의 자료형을 선택해서 값을 저장 가능
- 공용체 변수의 선언
- 형식
- union 공용체명 변수명;
- 사용 예
- union var abc;
- 형식
- 공용체 정의와 변수 선언 예
- union var {.char a; int b; float c; };
- union var abc;
- 공용체(union)란?
- 공용체의 사용
- 공용체가 사용되면
- 공용체의 멤버 중에서 자료크기(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
링크
TAG
- 교착상태
- 배열
- 인접리스트
- 구조체
- C
- 인접행렬
- 소프트웨어
- react
- 자료구조
- client side rendering
- 재귀함수
- 병행프로세스
- 동적프로그래밍
- 운영체제
- 알고리즘
- 스텍
- 최단경로
- javascript
- 퀵정렬
- 클래스
- BFS
- Stack
- Java
- 세마포어
- 이진탐색
- stackframe
- dfs
- server side rendering
- 입출력장치
- C++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함