※ 구조체 (struct) => 하나의 "자료형"처럼 사용, 다른 언어의 class와 비슷.
§ 구조체의 형태
struct 구조체이름 {
해당 type이
가졌으면 하는 멤버
};
struct의 크기는 멤버의 크기와 동일하다.
struct Point {
int age; // 4 byte
char name[20]; // 20 byte
int x[20]; // 80 byte
}; // 총 104 byte
§ 구조체와 배열
#include <stdio.h>
struct Person{
char name[20];
char phone[20];
int age;
};
int main(){
struct Person arr[3];
int i;
for (int i = 0; i < 3; i++) {
scanf("%s %s %d", arr[i].name, arr[i].phone, &arr[i].age);
}
for (int i = 0; i < 3; i++) {
printf("%s %s %d \n", arr[i].name, arr[i].phone, arr[i].age);
}
}
§ 구조체와 동적배열
※ 구조체와 포인터
※ 구조체와 typedef 선언
§ typedef 형식과 특징
typedef를 선언함으로 인해 struct 뒤의 이름을 생략할 수 있다.
※ 함수의 구조체 전달
- 함수는 항상 1개의 값만 return 할 수 있다. 따라서 값을 여러개 return 받고 싶을 때! 사용한다.
※ 구조체를 이용한 추상화
※ 공용체 (Union)
[ Mini Project ]
1. 프로그램 사용자로부터 int형 정수를 하나 입력받음
2. 입력받은 정수의 상위 2바이트와 하위 2바이트를 양수로 출력
3. 상위 1바이트와 하위 1바이트에 저장된 ASCII문자를 출력
[정답 코드]
#include <stdio.h>
typedef struct {
unsigned short upper;
unsigned short lower;
}DBShort;
typedef union {
int iBuf;
char cBuf[4];
DBShort sBuf;
}icDBuf;
int main(){
icDBuf buf;
scanf("%d", &(buf.iBuf));
printf("상위 2byte: %u \n", buf.sBuf.upper);
printf("하위 2byte: %u \n", buf.sBuf.lower);
printf("상위 1byte ASCII: %c \n", buf.cBuf[0]);
printf("하위 1byte ASCII: %c \n", buf.cBuf[3]);
}
※ 열거형 (사실 #define 전처리기를 더 많이 사용함)
#include <stdio.h>
typedef enum{
Do=1, Re=2, Mi=3, Fa=4, So=5, La=6, Ti=7
}Syllable;
void song(Syllable s){
switch(s){
case Do:
puts("도는 도라지"); return;
case Re:
puts("레는 레코드"); return;
case Mi:
puts("미는 미나리"); return;
case Fa:
puts("파는 파랑새"); return;
case So:
puts("솔은 솔방울"); return;
case La:
puts("라는 라디오"); return;
case Ti:
puts("시는 시냇물"); return;
}
}
int main(){
Syllable tone;
for (tone = Do; tone <= Ti; tone++) {
song(tone);
}
}
'C | C++ > C언어' 카테고리의 다른 글
this.Code(9)_ 매크로와 전처리기, 조건부 컴파일과 파일의 분할(헤더 디자인) (2) | 2022.11.06 |
---|---|
this.Code(8)_ 함수포인터와 void포인터, main(int argc, char* argv[]) (0) | 2022.11.06 |
this.Code(6)_ 프로세스와 동적할당(malloc, calloc, realloc) (0) | 2022.11.06 |
this.Code(5)_ 포인터배열 & 배열의 포인터, 배열기반 포인터, 포인터의 포인터 응용 (0) | 2022.11.06 |
this.Code(4)_ 문자열 표현, Call-by-Value(함수인자 전달), 포인터와 상수화 ★★★★★ (0) | 2022.11.06 |