상세 컨텐츠

본문 제목

구조체와 포인터 사용 예시

펌웨어 설계

by Zin9 2023. 1. 29. 18:58

본문

728x90

포인터를 사용하는 예시를 공유하고자 한다.

함수에서 포인터를 인수로 받아오는 것과 구조체 안에 구조체 선언을 한 예시를 공유하고자 한다.

실제 펌웨어 설계를 하다보면 구조체 안에 구조체가 있는 경우가 엄청 많기 때문이다.

아래 예시 코드를 보고 이해한다면 서보드라이버 설계하는 데 충분할 것이다.

엄청난 내용은 아니지만 기록으로 남겨본다.

 

구조체 안에 구조체 변수로 선언한 코드를 사용한다.

아래에 코드 전문을 첨부했다.

Replit.com 사이트를 활용하면 C 코드를 간편하게 작성하고 컴파일할 수 있다.

VScode로 하려면 gcc니 하는 설치 과정이 복잡하다.

 

#include <stdio.h>
#include <string.h>

/*************************************************************
코드의 실행 목적
1. add() 로 John과 Jenny의 정보를 동일하게 입력한다.
2. 두 친구의 정보는 2중 구조체로 정의하고 있다.

코드 설명
1. John과 Jenny라는 두 친구가 있다.(main 함수)
2. 두 친구의 나이와 고향은 같다.(add 함수)
3. 두 친구의 정보는 Friend 구조체로 선언한다.(main함수의 전역변수)
4. add 함수에서 구조체를 불러올 때 포인터 주소값으로 불러온다.
5. printf 함수로 입력된 두 친구의 정보를 출력한다.
*************************************************************/

typedef struct _Information {
  int age;
  char *hometown;
} Information;

typedef struct _Friend {
  Information info;
  char *name;
} Friend;

 void add(Friend *friend, char *Name) {
  friend->name = Name;
  friend->info.age = 20;
  friend->info.hometown = "Suwon";
}

int main(void) {
  Friend John;
  Friend Jenny;

  /* memset is defined in <string.h> */
  memset(&John, 0, sizeof(Friend));
  memset(&Jenny, 0, sizeof(Friend));

  printf("Before\n");
  printf("Name: %s, Age: %d, Hometown: %s \n", John.name, John.info.age, John.info.hometown);
  printf("Name: %s, Age: %d, Hometown: %s \n", Jenny.name, Jenny.info.age, Jenny.info.hometown);

  add(&John, "John");
  add(&Jenny, "Jenny");

  printf("\n");
  printf("After\n");
  printf("Name: %s, Age: %d, Hometown: %s \n", John.name, John.info.age, John.info.hometown);
  printf("Name: %s, Age: %d, Hometown: %s \n", Jenny.name, Jenny.info.age, Jenny.info.hometown);

  return 0;
}

 

코드 설명은 위에 있으니 읽어보도록 하자.

 

 

위의 코드를 실행하면 아래와 같은 결과를 얻는다.

처음엔 쓰레기값이 출력되고, add 함수로 입력된 값이 출력된다.

 

 

 

 

728x90

관련글 더보기