이번 편의 목표: 번호, 제목, 가격을 하나의 구조체로 묶고, 포인터로 멤버에 접근합니다.
구조체는 서로 다른 자료형을 한 값으로 묶습니다. 변수 뒤의 . 은 그 객체의 멤버를 고릅니다. 포인터 뒤의 ->는 그 주소가 가리키는 객체의 멤버를 고릅니다.
#include <stdio.h>
#include <string.h>
struct Book {
int id;
char title[32];
int price;
};
void print_book(const struct Book *book) {
if (book == NULL) {
return;
}
printf("%d %s %d\n", book->id, book->title, book->price);
}
int main(void) {
struct Book book;
book.id = 1;
book.price = 12000;
snprintf(book.title, sizeof(book.title), "%s", "개미");
print_book(&book);
return 0;
}출력은 1 개미 12000 입니다. print_book은 구조체 전체가 아니라 주소를 받습니다. 함수 안에서 멤버를 바꾸지 않으므로 const를 붙입니다. 구조체를 값으로 넘기면 멤버가 복사됩니다. 제목 배열까지 복사되므로, 읽기만 할 때는 포인터가 분명합니다.
멤버 title은 11편의 문자열과 같은 규칙입니다. 길이가 32인 배열이고 널 문자로 끝납니다.
직접 해 보기
가격이 1800인 공책을 book에 넣고 print_book으로 출력하세요.
해설
id, 제목, 가격 순으로 출력됩니다. snprintf의 대상은 book.title이고 크기는 sizeof(book.title)입니다. 점 연산자로 넣은 값을 포인터 매개변수가 ->로 읽습니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.