구조체(structure)
서로 다른 자료형을 갖는 자료들을 하나의 자료형으로 정의하는 자료형
구조체 → 사용자 정의 자료형
다양한 형식의 자료를 간결한 형식으로 표현
사용자가 새로운 형식을 정의하여 사용할 수 있다.
구조체의 정의
#include <stdio.h>
// 구조체 정의
struct student {
char name[20];
int age;
int id;
};
int main() {
// 구조체 변수 선언과 초기화
struct student s1 = {"John", 20, 12345};
// 구조체 멤버 접근
printf("Name: %s\\n", s1.name);
printf("Age: %d\\n", s1.age);
printf("ID: %d\\n", s1.id);
return 0;
}
함수에서의 구조체
- 구조체를 함수의 매개변수로 사용
일반 변수를 함수의 매개변수로 사용하는 것과 동일
매개변수가 구조체인 경우 함수의 형식매개변수를 구조체로 선언
해당 구조체 전체가 복사 되기 때문에 편리하지만 메모리 낭비가 심할 수도 있다.
#include <stdio.h>
struct Point {
int x;
int y;
};
void printPoint(struct Point p) {
printf("(%d, %d)\\n", p.x, p.y);
}
int main() {
// 구조체 변수 선언과 초기화
struct Point p1 = {10, 20};
// 함수 호출
printPoint(p1);
return 0;
}
- 구조체 포인터를 함수의 매개변수로 사용
구조체를 복사하지 않기 때문에 실행속도가 향상되고, 메모리 낭비를 줄일 수 있다.
#include <stdio.h>
struct Point {
int x;
int y;
};
void printPoint(struct Point* p) {
printf("(%d, %d)\\n", p->x, p->y);
}
int main() {
// 구조체 변수 선언과 초기화
struct Point p1 = {10, 20};
// 포인터 변수 선언
struct Point* ptr;
// 포인터에 변수의 주소 저장
ptr = &p1;
// 함수 호출
printPoint(ptr);
return 0;
}
typedef
이미 존재하는 자료형에 새로운 이름을 붙이기 위한 키워드
간단하거나 의미있는 이름으로 바꿀 수 있다.
구조체 형을 선언하는데 사용
typedef unsugned int BYTE; // 이름 정의
BYTE val; // 컴파일러가 unsugned int val 로 해석
typedef int * PTR; // int * PTR 로 재정의
PTR p1,p2; // int *p1 , *p2 를 의미
#include <stdio.h>
typedef struct student {
char name[20];
int age;
} student;
int main() {
// 구조체 변수 선언과 초기화
student s1 = {"John Doe", 20};
return 0;
}
구조체의 비트필드
주기억장치의 기억공간을 byte 단위가 아닌 bit 단위로 사용하는 방법
기억공간을 절약하고, 융통성 있는 데이터 구조체를 만들 수 있다.
**struct bitfield_example {
unsigned int a: 3; // 3비트 크기의 비트 필드
};**
공용체(union)
동일한 기억장소에 여러 유형의 자료를 저장하기 위해 정의하는 자료형
공용체 안에 포함된 자료들은 같은 기억장소 공유
공용체의 예시
공용체의 멤버들이 완전히 다른 자료형을 가질 때
기억공간을 절약하기 위해 사용
ex) 급여 관리 프로그램
- 원화로 월급 받는 사람 - 정수형으로 처리
- 달러로 월급을 받는 사람 - 실수형으로 처리
→ 이러한 경우, 공용체 사용 시 필요에 따라 메모리의 자료형을 선택해 값을 저장할 수 있다.
union var abc; // union 공용체명 변수명
union var{ // 정의
char a; // 멤버
int b;
float c;
}
union var abc; // 선언
abc.a = "A";
abc.b = 123;
abc.c = 1234.5678;
공용체가 사용되면 멤버 중에서 크기(byte) 가 가장 큰 멤버에 대한 기억 공간만 할당
(공용 사용)
union hold { // 정의
short int digit; // 멤버
double big;
char letter;
}
union hold fit; // 선언
hold.digit = 23; // 23저장 2btye 사용
hold.big = 1234.567; // 23이 지워지고 1234.567이 저장 (8byte 사용)
hold.letter = "A"; // 1234.567 이 지워지고 'A' 저장 (1byte 사용)
hoid 라는 공용체의 멤버변수가 사용하는 메모리의 크기중 가장 큰 값이 hold의 크기가 된다.
728x90
'KNOU > 요약정리' 카테고리의 다른 글
[C 프로그래밍] 메모리 동적 할당 (0) | 2023.05.10 |
---|---|
[C 프로그래밍] 파일처리함수 (0) | 2023.05.10 |
[C 프로그래밍] 배열과포인터 (0) | 2023.05.10 |
[C 프로그래밍] 함수 (0) | 2023.05.10 |
[C 프로그래밍] 제어문(선택, 반복, 기타) (0) | 2023.05.10 |
댓글