요즘 기본기가 중요함을 느끼고 C를 공부하고 있습니다.
1. 구조체 단순히접근
#include <stdio.h>
//Struct packet 선언
typedef struct packet
{
int data0;
int data1;
int data2;
}Packet;
int main()
{
Packet p; //Struct Packet 정의
p.data0 = 0;
p.data1 = 1;
p.data2 = 2;
printf("%d %d %d ", p.data0, p.data1, p.data2);
return 0;
}
2. 구조체 포인터로 접근
#include <stdio.h>
// Struct packet 선언
typedef struct packet
{
int data0;
int data1;
int data2;
}Packet;
int main()
{
Packet p; // Struct Packet 정의
Packet* p_pointer; // Packet에 대한 Pointer 선언
p_pointer = &p; // Pointer 정의
p_pointer->data0 = 0;
p_pointer->data1 = 1;
p_pointer->data2 = 2;
printf("%d %d %d ", p.data0, p.data1, p.data2);
return 0;
}
3. Struct 최적화 (Padding bit)
#include <stdio.h>
// Struct packet 선언
typedef struct packet
{
char data0;
char data1;
int data2;
}Packet;
int main()
{
Packet p; // Struct Packet 정의
printf("%d", sizeof(p));
return 0;
}
과연 위 구제체는 몇 비트인가?
6바이트라고 생각할 수 있지만, 8바이트
이유 : 구조체는 가장 큰 변수만큼 증가하기 때문이다.
그렇다면 둘의 순서가 바뀌면 어떻게 되는가?
#include <stdio.h>
// Struct packet 선언
typedef struct packet
{
int data0;
char data1;
char data2;
}Packet;
int main()
{
Packet p; // Struct Packet 정의
printf("%d", sizeof(p));
return 0;
}
똑같이 8바이트이다.
그렇다면 이런 구조체일 때는 몇 바이트인가?
#include <stdio.h>
// Struct packet 선언
typedef struct packet
{
char data0;
int data1;
char data2;
}Packet;
int main()
{
Packet p; // Struct Packet 정의
printf("%d", sizeof(p));
return 0;
}
위 구조체는 12bytes이다.
극한의 메모리 낭비를 일으킨다.
BLE 통신을 하게 되었는데, 통신에서는 이런 구조체와 공용체가 굉장히 중요하다.
728x90
반응형
'C, C++' 카테고리의 다른 글
[C] Call by Value VS Call by Reference (0) | 2021.08.16 |
---|---|
[C] UNION 공용체와 Struct 구조체를 이용해 간단한 패킷 만들기 (1) | 2021.01.20 |
[C]BMP구조체 : #pragma pack(push,1 )사용하지 않고 정렬하기 2탄 (0) | 2020.03.02 |
[C]BMP구조체 : #pragma pack(push, 1) 사용하지 않고 정렬하기 (0) | 2020.02.18 |
[C]BMP RGB 값 조절 (0) | 2020.01.29 |