구조체는 프로그램 구현에 있어서 중요한 위치를 차지하고 있음
구조체를 정의하는 이유
"구조체를 통해서 연관 있는 데이터를 하나로 묶을 수 있는 자료형을 정의하면,
데이터의 표현 및 관리가 용이해지고, 그만큼 합리적인 코드를 작성할 수 있게 된다."
단순히 편의를 위한 것으로 들리겠지만, 구조체의 정의는 프로그램 구현에 있어서 절대적인 위치를 차지
예제.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
typedef struct student
{
char name[20]; // 학생 이름
char stdnum[20]; // 학생 고유 번호
char school[20]; // 학교 이름
char major[20]; // 전공
int year; // 학년
}Student;
void showstudentinfo(Student* sptr)
{
printf("학생 이름: %s\n", sptr->name);
printf("학생 고유번호: %s\n", sptr->stdnum);
printf("학교 이름: %s\n", sptr->school);
printf("선택 전공: %s\n", sptr->major);
printf("학년: %d\n", sptr->year);
}
int main(void)
{
Student arr[7];
for (int i = 0; i < 7; i++)
{
printf("이름: "); scanf("%s", arr[i].name);
printf("번호: "); scanf("%s", arr[i].stdnum);
printf("학교: "); scanf("%s", arr[i].school);
printf("전공: "); scanf("%s", arr[i].major);
printf("학년: "); scanf("%d", &arr[i].year);
}
for (int i = 0; i < 7; i++)
showstudentinfo(&arr[i]);
return 0;
}
학생정보를 받기 위해 Student가 정의
구조체를 정의하지 않는다면 다수의 배열이 필요하다.
그리고 12행에 정의된 함수의 매개변수 선언도 이렇듯 간단해질 수 없음.
출력할 데이터의 종류만큼 매개변수가 선언되어야 하기 때문.
그래서 구조체의 정의가 필요한 상황에서 구조체를 정의하지 않으면, 합리적인 코드 작성이 불가능
중첩된 구조체의 정의와 변수의 선언
배열이나 포인터 변수가 구조체의 멤버로 선언될 수 있듯이, 구조체 변수도 구조체의 멤버로 선언될 수 있다.
#include <stdio.h>
typedef struct point
{
int xpos;
int ypos;
}Point;
typedef struct circle
{
Point cen; // 구조체의 변수를 멤버로 선언
double rad;
}Circle;
void showcircleinfo(Circle* cptr)
{
printf("[%d, %d] \n", (cptr->cen).xpos, (cptr->cen).ypos);
printf("radius : %g \n\n", cptr->rad);
}
int main(void)
{
Circle c1 = { {1, 2}, 3.5 }; // 구조체 변수가 멤버로 존재할 경우, 중괄호를 이용해서 멤버의 초기화 구분 가능
Circle c2 = { 2, 4, 3.9 }; // 중괄호를 이용해서 구조체 변수의 초기화를 구분 짓지 않으면 순서대로 초기화 된다.
showcircleinfo(&c1);
showcircleinfo(&c2);
}
참고 : [윤성우 열혈 C 프로그래밍] - 대부분의 내용 및 코드는 이 책에서 개인 공부 정리 목적으로 참고하였습니다.
'Language&Framework&Etc > C' 카테고리의 다른 글
구조체와 사용자 정의 자료형2(23-5) 열거형(Enumerated Type)의 정의와 의미 (0) | 2020.12.14 |
---|---|
구조체와 사용자 정의 자료형2(23-4) 공용체(Union Type)의 정의와 의미 (0) | 2020.12.13 |
구조체와 사용자 정의 자료형2(23-2) 함수로의 구조체 변수 전달과 반환 (0) | 2020.12.13 |
구조체와 사용자 정의 자료형2(23-1) 구조체의 정의와 typedef 선언 (0) | 2020.12.13 |
구조체와 사용자 정의 자료형1(22-2) 구조체와 배열 그리고 포인터 (0) | 2020.12.12 |