개발자 노트
구조체 프로그래밍 본문
-
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프로그래밍;윤성우
'▶ INBOX ◀' 카테고리의 다른 글
입력확인: 알파벳과 숫자만으로 구성된 입력 허용 (0) | 2016.09.22 |
---|---|
PATH에서 프로그램 검색 (0) | 2016.09.20 |
[Linux] 명령어 모음 (0) | 2016.09.20 |
가변인자 함수 (0) | 2016.09.20 |
리눅스 커널과 디바이스 드라이버 프로그래밍 (0) | 2016.09.19 |