일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- volley
- 로드바이크
- httpclient post
- 안드로이드 이미지 로드
- android loadImage
- 부산에서 창원
- c언어 구조체
- 삼량진
- 구포에서 삼량진
- 낙동강 종주
- 구포에서 자전거
- workbench
- 구조체
- ImageLoad
- android ImageLoad
- android facebook
- elk stack
- 자전거
- 창원에서 부산
- android imageView zoom
- 자바
- image zoom
- spring boot
- 부산에서 창원 자전거
- NetworkImageView
- C언어
- 삼량진 자전거
- laravel
- mysql
- spring
Archives
- Today
- Total
은근한
C언어 11. 공용체 및 열거체(union,enum) 본문
공용체
여러 벰버들이 메모리를 공유한느 것이 바로 공용체이다.
구조체의 멤버들은 메모리에 순차적으로 할당되는데 비해 공용체의 멤버들은 모든 멤버의 주소가 같다.
따라서 공용체의 멤버들은 메모리를 공유하게 된다.
* 주의할점은
여러멤버가 메모리를 공유하기 때문에 한 멤버의 값을 변경하면 다른 멤버의 값이 함께 변경된다.
공용체의 정의
형식
union 태그명{
데이터형 멤버형;
데이터형 멤버형;
데이터형 멤버형;
...
};
ex)
union data{
unsigned long dword;
unsigned char byte[4]; //공용체 멤버
};
공용체를 일단 정의하면 공용체도 새로운 데이터형이 된다. 공용체 변수를 메모리에 할당하면
공용체의 멤버들이 모두 같은 주소에 할당된다. 공용체의 멤버에 접근할 때도 멤버 접근 연산자인 .(마침표)를 사용한다.
ex) 공용체의 사용예
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include<stdio.h> union data{ unsigned long dword; unsigned char byte[4]; }; void main() { union data d1; int i; printf("data 공용체의 크기 i%d\n",sizeof(union data)); d1.dword = 0x12345678; printf("d1.dword = %08x\n",d1.dwrod); for(i=0;i<4;i++) printf("d1.byte[%d]=%02x\n",i,d1.byte); } |
공용체의 멤버들은 동시에 사용되지 않는다. 위의 예저와 같이 dword 멤버에 값을 저장하고,
그 값을 byte 멤버로는 읽어서 사용만 한다. 공용체를 이용하면 같은 값을 다른 의미로 해석해서 접급할 수 있다.
구조체의 모든 멤버들이 동시에 사용될 필요가 없을때 공용체가 유용하게 쓰인다.
열거체,열거형
열거체 정의
형태
enum 태그명 {열거상수1,열거상수2,열거상수3....};
ex)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include<stdio.h> enum week {sun,mon,tue,wed,thu,fri,sat}; //열거체 정의 void main() { enum week weekday; //열거체 변수의 선언 weekday = mon; //열거 상수 사용 switch (weekday) { case sun: printf("일요일이다.\n");break; case mon: printf("월요일이다.\n");break; .. .. } } |