구조체
구조체란 사용자가 C언어의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입으로 기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있다는 장점이 있다
구조체의 정의 방법은
1
2
3
4
5
6
7
8
struct 구조체이름{
멤버변수1의타입 멤버변수1의이름;
멤버변수2의타입 멤버변수2의이름;
...
};
위와 같은 방법으로 선언한다
구조체의 사용방법은
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct Human{
int age;
int height;
int weight;
};
int main(){
struct Human a;
a.age = 99;
a.height = 185;
a.weight = 80;
printf("a 에 대한 정보 \n");
printf("나이 : %d \n", a.age);
printf("키 : %d \n", a.height);
printf("몸무게 : %d \n", a.weight);
}
출력
1
2
3
4
a 에 대한 정보
나이 :99
키 :185
몸무게: 80
위와 같이 사용할 수 있다
코드를 뜯어보면
1
struct Human a;
이 부분은 a를 Human 구조체 타입으로 만든 것이고
1
2
3
a.age = 99;
a.height = 185;
a.weight = 80;
그 후 a.age a.height a.weight로 구조체의 멤버에 값을 대입한 것이다
공용체
공용체는 union 키워드를 사용하여 선언하며 바로 모든 멤버 변수가 하나의 메모리 공간을 공유한다는 점을 제외하고 구조체와 같다
또한 모든 멤버 변수가 같은 메모리를 공유하므로 공용체는 한 번에 하나의 멤버 변수밖에 사용할 수 없다
코드
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
typedef union{
unsigned char a;
unsigned short b;
unsigned int c;
} SHAREDATA;
int main(){
SHAREDATA var;
var.c = 0x12345678;
printf("%x\n", var.a);
printf("%x\n", var.b);
printf("%x\n", var.c);
}
출력
1
2
3
78
5678
12345678
열거형
열거형는 새로운 타입을 선언하면서 동시에 해당 타입이 가질 수 있는 정수형 상숫값도 같이 명시할 수 있는 타입을 말한다
이러한 열거형을 이용하면 프로그램의 가독성이 높아지고 변수가 지니는 값에 의미를 부여할 수도 있다는 장점이 있다
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
enum Days {MON, TUE, WED, THU, FRI, SAT, SUN};
int main(){
enum Days today;
today = SAT;
if (today >= SAT && today <= SUN){
puts("오늘은 주말이네요~ 주말에도 열심히 공부하는 여러분은 최고에요!");
}
else{
printf("주말까지 %d일 남았어요~ 조금만 더 힘내자구요!", 5 - today);
}
puts("각각의 열거형에 해당하는 정수값은 다음과 같습니다.");
printf("%d %d %d %d %d %d %d\n", MON, TUE, WED, THU, FRI, SAT, SUN);
}
출력
1
2
3
오늘은 주말이네요~ 주말에도 열심히 공부하는 여러분은 최고에요!
각각의 열거형 멤버에 해당하는 정수값은 다음과 같습니다.
0 1 2 3 4 5 6