개발자 노트

구조체 프로그래밍 본문

▶ INBOX ◀

구조체 프로그래밍

heeyam 2016. 9. 20. 15:51
반응형
  • typedef 선언

    기존에 존재하는 자료형의 이름에 새 이름을 부여하는 것을 목적으로 하는 선언이다.

    typedef 선언에 있어서 새로운 이름의 부여는 가장 마지막에 등장하는 단어를 중심으로 이뤄진다.

    typedef로 정의되는 자료형의 이름은 대문자로 시작하는 것이 관례이다.

     

  • 구조체의 정의와 typedef 선언

    typedef 선언을 이용하면 구조체 변수 선언 때 struct 선언을 생략할 수 있다.

    다음과 같이 구조체 정의와 typedef 선언을 한데 묶어서 사용하면 된다.

    typedef struct person

    {

        char name[20];

        int age;

    } Person;

     

    구조체 변수를 선언할 때는 struct 없이 다음과 같이 선언하면 된다.

    Person man;

     

    typedef 선언이 추가 되었어도 struct 선언을 통한 구조체 변수 선언도 다음과 같이 가능하다.

    struct person man;

     

  • 구조체의 이름 생략

    typedef선언으로 구조체를 정의하면 구조체 변수를 선언할 때도 typedef에 의해 정의된 이름 Person을 보통 사용하기 때문에

    구조체의 이름 person은 사실상 별 의미를 갖지 않게 된다.

    따라서 다음과 같이 구조체의 이름을 생략할 수도 있다.

    typedef struct

    {

        char name[20];

        int age;

    } Person;

     

    단, 위와 같이 구조체의 이름을 생략할 경우에는 다음의 형태로는 구조체 변수를 선언할 수 없다.

    struct person man; // 불가능한 선언

     

  • 구조체 변수와 포인터

    (*book).title 이것을 book->title로 동일하게 사용할 수 있다.

    즉 *연산과 .연산을 하나의 -> 연산으로 대신할 수 있다.

     

  • 프로그래밍

    [제목, 저자명, 페이지수]에 대한 정보를 저장할 수 있는 구조체를 정의하고, 구조체 배열을 선언해서 도서에 대한 정보를 저장하는 구조로 작성해 본다.

    main 함수에서는 사용자로부터 3권의 도서에 대한 정보를 입력 받고, 입력이 끝나면 도서에 대한 내용을 출력해 준다.

 

#include <stdio.h>

typedef struct books
{
        char title[20];
        char auther[20];
        int page;
} Books;

void ShowBookInfo(Books *book)
{
        printf("auther: %s\n",book->auther);
        printf("title: %s\n", book->title);
        printf("page: %d\n", book->page);
}

Books GetBookInfo(void)
{           
        Books book;
        printf("auther: ");
        scanf("%s", book.auther);
        printf("title: ");
        scanf("%s", book.title);
        printf("page: ");
        scanf("%d", &book.page);

        return book;
}

int main(void)
{
        Books book[3];
        int i;

        for(i=0; i<3; i++)
        {   
                printf("input information\n");
                book[i]=GetBookInfo();
        }   

        printf("\n");

        for(i=0; i<3; i++)
        {   
                printf("\nbook %d\n",i+1);
                ShowBookInfo(&book[i]);
        }

        return 0;
}

 

# 출처

열혈 C프로그래밍;윤성우

반응형
Comments