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++;
    	}
    }