Table of contents
1. 정리
구조체를 선언하고 구조체 문법을 통해 접근하는 방식과 포인터로 1Byte 씩, 접근하는 예제입니다. 먼저, 5Byte의 my_struct 구조체를 선언하겠습니다. 구조체는 안에는 1Byte씩 할당된 변수들인 Rsv0~4까지 존재합니다.
typedef struct
{
uint8_t Rsv0;
uint8_t Rsv1;
uint8_t Rsv2;
uint8_t Rsv3;
uint8_t Rsv4;
}_my_struct;
_my_struct my_struct;
차후에 사용될, 변수 i와 1Byte 포인터를 선언하겠습니다. 그리고 구조체를 구조체 문법형태로 접근하여 값을 넣고, 출력하겠습니다. 각각의 구조체 변수에 0~4값이 저장됩니다. 출력하면 다음과 같은 형태로 출력됩니다.
출력:
0, 1, 2, 3, 4
int i = 0;
uint8_t *ptr_struct;
my_struct.Rsv0 = 0;
my_struct.Rsv1 = 1;
my_struct.Rsv2 = 2;
my_struct.Rsv3 = 3;
my_struct.Rsv4 = 4;
printf("%d, %d, %d, %d, %d\r\n", my_struct.Rsv0, my_struct.Rsv1, my_struct.Rsv2, my_struct.Rsv3, my_struct.Rsv4);
이제, 구조체의 주소값을 1Byte의 포인터 변수인 ptr_struct에 저장하겠습니다. 그리고 반복문을 통해, 주소값을 하나씩 증가시키면서 출력하겠습니다.
출력:
0 1 2 3 4
ptr_struct = (uint8_t*)&my_struct;
for (i = 0; i < 5; i++)
{
printf("%d ", *ptr_struct);
ptr_struct++;
}
구조체 안의 변수가 5개만 존재하여, 코드의 간결함이 잘 느껴지진 않네요. 하지만, 구조체 안의 변수가 100개였다면 코드 줄수는 비약적으로 차이나게 됩니다. 반복적인 연산작업에는 구조체를 포인터로 접근하는 것이 훨씬 좋을 듯 합니다.
2. 전체코드
#include <stdio.h>
#include <stdint.h>
typedef struct
{
uint8_t Rsv0;
uint8_t Rsv1;
uint8_t Rsv2;
uint8_t Rsv3;
uint8_t Rsv4;
}_my_struct;
_my_struct my_struct;
int main(void)
{
int i = 0;
uint8_t *ptr_struct;
my_struct.Rsv0 = 0;
my_struct.Rsv1 = 1;
my_struct.Rsv2 = 2;
my_struct.Rsv3 = 3;
my_struct.Rsv4 = 4;
printf("%d, %d, %d, %d, %d\r\n", my_struct.Rsv0, my_struct.Rsv1, my_struct.Rsv2, my_struct.Rsv3, my_struct.Rsv4);
ptr_struct = (uint8_t*)&my_struct;
for (i = 0; i < 5; i++)
{
printf("%d ", *ptr_struct);
ptr_struct++;
}
}
'소프트웨어 > C' 카테고리의 다른 글
.h 파일과 .c 파일 (0) | 2023.04.16 |
---|---|
C언어 배열 복사하기 배열 / memcpy / 포인터 (0) | 2022.03.11 |
C언어 상수 선언을 위한 Const 예제 (0) | 2022.02.20 |
C언어 파일 입출력 예시 (0) | 2022.02.20 |
C언어 strlen 함수 구현하기 (0) | 2022.02.20 |