일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 굿아이템 양면오픈형 투명 접이식 리빙박스 폴딩박스 옷정리함 수납박스 펜트리수납함
- 샤오미 미밴드 7 스마트밴드
- 두칸 프릴 오버핏 후드티
- 코멧 접이식 투명 리빙박스 56L 대형 2개입
- 잡잡 NBR 요가매트 스탠다드 운동매트 10mm 퍼플
- 긍정
- 22FW 이바나 빈티지 체크 셔츠 더스트핑크 8054631
- 위드리빙 대용량 옷 수납 방수 바구니
- 삼성 갤럭시워치5
- 반스 올드스쿨 VN000D3HY28
- 1개
- 남쪽나무 세면대 세면대 세트 (스마트거울) 벽걸이세면대 이케아세면대 세면기
- 오토비 AZ100TR 32G 전후방 FHD 2채널 트럭 화물차 전용 블랙박스 보증기간 2년 20m케이블 포함 후방 적외선 방수 AS 2년보장
- ipTIME 유무선공유기
- 대림디움 대림바스플랜 PL-3070 탑카운터형 세면대/욕실/화장실/세면도기
- ChatGPT
- 더블탭스 22SS 정글 01 셔츠 WTAPS JUNGLE 01 GREIGE M
- 리빙앤트리 펠리컨 박스 대
- 미네 리빙다이닝 6인 원목 코너형 식탁세트(소파형)
- 러버메이드 벤티드 브루트(75L) 원형 컨테이너 리빙박스
- 올리비아 스텐 세면대 세트
- 8052 블랙라인 정사각 세면기
- 네스파 다야몬드은박 후드티
- list #pop #remove #del #append #insert #list형 #파이썬 파이썬 기본 문법 #파이썬 list
- 내셔널지오그래픽 피너스 빅로고 라운드넥 긴팔 티셔츠 카본 블랙
- 톰브라운 명품톰브라운 23SS 더블페이스 니트 아우터형 포켓 셔츠 MJT291A 07545 415
- 22FW 로고 패치 포켓 체크 셔츠 2F000 03 M2359 F41
- 23SS 스트라이프 오버핏 셔츠 723033 V2L30 9066
- [제이앤제나] 허리에 무리없는 신생아부터 역류방지쿠션_앨리펀블루 역류방지쿠션
- 봄봄 골드라인 4023G 탑볼세면대 화이트골드 카운타 도기볼 카페세면대
- Today
- Total
냥집사의 개발일지
C언어 - 구조체 (struct) 본문
안녕하세요 오늘은 구조체에 대해 알아보겠습니다~
지금까지는 기본 자료형(int, double, char etc.)등으로만 코드를 구성했다면
오늘은 사용자 정의 자료형 즉, user의 필요에 따른 자료형을 struct를 이용해 만들어 보겠습니다.
1. 구조체 선언 과 멤버 접근 연산자 사용 방법
구조체 선언 하는 법은 아래와 같습니다.
예약어(struct) + 구조체 이름 {구조체 멤버 변수}
ex. struct s1{
int i1;
char c1;
double d1;
}
구조체를 선언하고 멤버 변수에 접근하여 출력하는 예제를 살펴보겠습니다.
#include <stdio.h>
struct Earth{
char *continents; // "Asia", "Africa", "North_America", "South_America", "Antarctica", "Europe", "Australia"
int countries_num;
};
int main(){
struct Earth earth;
earth.continents = "Asia";
earth.countries_num = 48;
printf("continents : %s\n", earth.continents);
printf("countries_num : %d\n", earth.countries_num);
return 0;
}
1. Earth라는 struct를 만들고 멤버 변수로는 contirnents(문자 포인터형), countries_num(정수형)을 선언했습니다.
2. main 함수에서 Earth 구조체 변수 earth를 선언합니다.
3. earth에 멤버 접근 연산자('.')를 이용해 Earth 구조체 멤버에 접근합니다. (ex. earth.continents)
4. 아래 결과 처럼 멤버 접근 연산자를 이용해 구조체 멤버에 할당한 변수가 정상 출력된 것을 확인했습니다.
TIPS 구조체는 실행 효율을 위해 padding byte를 넣어서 byte 정렬을 합니다!
ex 1.
struct s1{
int i;
double d;
}
위와 같은 구조체가 있다면 구조체 중 가장 큰 자료형을 기준으로 메모리 공간을 할당합니다.
위의 구조체에서는 double이 가장 크기 때문에 int형 멤버 변수는 4 byte padding byte를 더해 8byte로 할당되게 됩니다!
ex 2.
struct s1{
int i;
double d;
char c;
}
위의 구조체에서도 가장 큰 자료형은 double입니다.
따라서 int형 멤버 변수는 4byte padding byte를 char형 멤버 변수는 7byte padding byte가 할당됩니다!
그런데 이때 padding byte가 너무 많이 할당되는 것 같지 않나요?
아래 예제에서 최적화 시켜보아요~
ex 3.
struct s1{
int i;
char c;
double d;
}
예제 2번과 비교해서 char형 멤버 변수와 double형 멤버 변수의 위치가 바꿨습니다.
역시 위의 구조체에서도 가장 큰 자료형은 double입니다.
다만, char형 자료형의 크기가 int형의 padding byte 4보다 작기 때문에
char 형이 padding byte 쪽에 할당된 것을 확인할 수 있습니다.
이렇게 멤버 변수 선언 위치만 바꾸어도 코드 최적화를 시킬 수 있다는 점!!
TIP 안에 TIP
unsigned type은 data 확장 시 무조건 zero expansion (padding byte에 0이 할당)
signed type은 data 확장 시 무조건 sign bit expansion (padding byte에 기존 data가 음수면 1이 할당, 양수 면 0이 할당)
오늘은 구조체에 대해 간단히 알아보았습니다
이번 포스팅을 통해 구조체의 선언, 멤버 변수 이용 방법, 구조체의 구조를 이해하는데 도움이 됐으면 좋겠습니다.
그럼 다음에 만나요~
'C언어' 카테고리의 다른 글
C언어 - 구조체 포인터 & 구조체 배열 (struct pointer & struct array) (0) | 2022.09.25 |
---|---|
C언어 - 구조체 (struct) (2) (0) | 2022.09.24 |
C언어 - 메모리 동적 할당 (문자열) (0) | 2022.09.22 |
C언어 - 메모리 동적 할당 (calloc, realloc) (0) | 2022.09.21 |
C언어 - 메모리 동적 할당 (malloc) (2) | 2022.09.20 |