Tech Blog/C and C++

C언어 - 구조체 (structure)

EXPRESSIONS HAVE POWER 2021. 6. 13. 01:24

1. 구조체 사용 및 출력 

#include <stdio.h>

struct GameInfo {
    char * name;
    int year;
    int price;
    char * company;

    char * name2;
    int year2;
    int price2;
    char * company2;
};

int main(){

    // 구조체 사용
    struct GameInfo gameInfo1;
    gameInfo1.name = "나도게임";
    gameInfo1.year = 2017;
    gameInfo1.price = 50;
    gameInfo1.company = "나도회사";

    // 구조체 출력

    printf("-- 게임 출시 정보 --\n");
    printf("  게임명  : %s\n", gameInfo1.name);
    printf("  발매년도  : %d\n", gameInfo1.year);
    printf("  게임가격  : %d\n", gameInfo1.price);
    printf("  회사명  : %s\n", gameInfo1.company);

    // 구조체를 배열처럼 초기화 

    struct GameInfo gameInfo2 = {"너도게임", 2017, 100, "너도회사"};
    printf("-- 또 다른 게임 출시 정보 --\n");
    printf("  게임명  : %s\n", gameInfo2.name);
    printf("  발매년도  : %d\n", gameInfo2.year);
    printf("  게임가격  : %d\n", gameInfo2.price);
    printf("  회사명  : %s\n", gameInfo2.company);
    
    return 0;
}

실행결과 

-- 게임 출시 정보 --
  게임명  : 나도게임
  발매년도  : 2017
  게임가격  : 50
  회사명  : 나도회사
-- 또 다른 게임 출시 정보 --
  게임명  : 너도게임
  발매년도  : 2017
  게임가격  : 100
  회사명  : 너도회사

2. 구조체 배열 

#include <stdio.h>

struct GameInfo {
    char * name;
    int year;
    int price;
    char * company;
};
int main(){

    // 구조체 배열
    struct GameInfo gameArray[2] = {
        {"나도게임", 2017, 50, "너도회사"},
        {"너도게임", 2017, 100, "너도회사"}
    };

    printf("-- 구조체 배열 기본 출력 게임 출시 정보 --\n");
    printf("%s\n",gameArray[0].name);
    printf("%d\n",gameArray[0].year);
    printf("%d\n",gameArray[0].price);
    printf("%s\n",gameArray[0].company);
    printf("\n\n%s\n",gameArray[1].name);
    printf("%d\n",gameArray[1].year);
    printf("%d\n",gameArray[1].price);
    printf("%s\n",gameArray[1].company);

    printf("\n\n-- 구조체 배열 다르게 출력 게임 출시 정보 --\n");
    printf("%s\n",gameArray->name);
    printf("%d\n",gameArray->year);
    printf("%d\n",gameArray->price);
    printf("%s\n",gameArray->company);

    return 0;

}

실행결과

-- 구조체 배열 기본 출력 게임 출시 정보 --
나도게임
2017
50
너도회사


너도게임
2017
100
너도회사


-- 구조체 배열 다르게 출력 게임 출시 정보 --
나도게임
2017
50
너도회사

 

- 이걸로 (->) 두번째 줄은 그대로 출력 어떻게함..? 

 

3. 구조체 포인터 사용 + 구조체 안의 구조체

#include <stdio.h>

struct GameInfo {
    char * name;
    int year;
    int price;
    char * company;

    struct GameInfo * friendGame; // 연관 업체 게임
};

int main(void)
{

// 구조체 사용 
struct GameInfo gameInfo1;
gameInfo1.name="나도게임";
gameInfo1.year=2017;
gameInfo1.price=50;
gameInfo1.company="나도회사";

struct GameInfo gameInfo2 = {"너도게임", 2017, 100, "너도회사"};

// 구조체 포인터
struct GameInfo * gamePtr; // 미션맨
gamePtr = &gameInfo1;
printf("\n\n-- 미션맨의 게임 출시 정보 --\n");
printf("  게임명  : %s\n", (*gamePtr).name);
printf("  발매년도  : %d\n", (*gamePtr).year);
printf("  가격  : %d\n", (*gamePtr).price);
printf("  제작사  : %s\n", (*gamePtr).company);

printf("\n\n-- 미션맨의 게임 출시 정보 --\n");
printf("  게임명  : %s\n", gamePtr->name);
printf("  발매년도  : %d\n", gamePtr->year);
printf("  가격  : %d\n", gamePtr->price);
printf("  제작사  : %s\n", gamePtr->company);

// 연관 업체 게임 소개 
gameInfo1.friendGame = &gameInfo2;

// 연관 업체의 게임 출시 정보
printf("\n\n-- 미션맨 친구의 게임 출시 정보 --\n");
printf("  게임명  : %s\n", gameInfo1.friendGame->name);
printf("  발매년도  : %d\n", gameInfo1.friendGame->year);
printf("  가격  : %d\n", gameInfo1.friendGame->price);
printf("  제작사  : %s\n", gameInfo1.friendGame->company);

}

실행결과 

-- 미션맨의 게임 출시 정보 --
  게임명  : 나도게임
  발매년도  : 2017
  가격  : 50
  제작사  : 나도회사


-- 미션맨의 게임 출시 정보 --
  게임명  : 나도게임
  발매년도  : 2017
  가격  : 50
  제작사  : 나도회사


-- 미션맨 친구의 게임 출시 정보 --
  게임명  : 너도게임
  발매년도  : 2017
  가격  : 100
  제작사  : 너도회사

 

4. typedef 

#include <stdio.h>

struct GameInfo {
    char * name;
    int year;
    int price;
    char * company;

    struct GameInfo * friendGame; // 연관 업체 게임
};

typedef struct GameInformation {
    char * name;
    int year;
    int price;
    char * company;

    struct GameInfo * friendGame; // 연관 업체 게임
} GAME_INFO;

int main()
{

int i = 1;
typedef int 정수;
typedef float 실수;
정수 정수변수 = 3; // int i = 3
실수 실수변수 = 3.23f; // float f = 3.23f
printf("정수변수 : %d, 실수변수 % 2f\n\n", 정수변수, 실수변수);

typedef struct GameInfo 게임정보;

게임정보 game1;

game1.name = "한글게임";
game1.year = 2015;

GAME_INFO game2;
game2.name="한글게임2";
game2.year=2012;

printf("게임 이름 : %s, 발매연도 : %d\n\n", game1.name, game1.year);
printf("게임 이름 : %s, 발매연도 : %d\n", game2.name, game2.year);

}

실행결과 

정수변수 : 3, 실수변수  3.230000

게임 이름 : 한글게임, 발매연도 : 2015

게임 이름 : 한글게임2, 발매연도 : 2012