구조체
프로그래밍을 할 때 실제로 처리할 수많은 데이터들은 단일 자료형으로 구성되기보다는, 여러 자료형이 뒤섞여 있는게 다반사이다. 예를 들어, 한 학생의 성적처리를 한다고 하면, 이름(char), 학번(int), 국어점수(int), 영어점수(int), 총점(int), 평균(double) 등 최소 3가지의 자료형이 필요하다. 구조체란 이러한 경우의 편의성을 위해 여러 자료형을 묶어서 프로그램에 사용할 새로운 자료형을 만들 수 있게 해준다. 그리고 이 구조체에 저장된 데이터를 처리할 수 있는 함수 기능이 추가된다면 클래스가 되는 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#include "config.h"
// <구조체의 형식>
// [typedef] struct 구조체이름 {
// 구조체를 구성하는 멤버 변수 => 필드
// ...;
// } [별명]; // ";" 을 빼먹으면 안된다. 별명은 생략가능
// 프로그램에서 Jumsu 라고 코딩하면 컴파일러는 typedef 에서 정의한 대로 struct Score 로 인식한다.
typedef struct Score {
int no;
char name[11];
int cpp, java, jsp, total;
double average;
} Jumsu;
void main() {
// 구조체 변수 선언 방법
// [struct] 구조체이름 구조체변수이름; => 선언만 한 상태
// [struct] 구조체이름 구조체변수이름 = {초기치}; => 초기화
// [struct] 구조체이름 구조체변수이름[첨자]; => 리스트(배열) 만들 때
// [struct] 구조체이름* 구조체포인터변수이름; => 포인터 변수
struct Score score1;
// 구조체 멤버 변수에 접근하는 방법
// 구조체 변수나 배열에서 구조체 멤버에 접근하려면 "."을 찍어서 접근한다.
// 구조체 포인터 변수에서 구조체 멤버에 접근하려면 "->"을 찍어서 접근한다.
score1.no = 1;
strcpy_s(score1.name, "홍길동");
score1.cpp = 85;
score1.java = 92;
score1.jsp = 71;
score1.total = score1.cpp + score1.java + score1.jsp; // "." 사용
score1.average = (double)score1.total / 3;
printf("%s 님은 평균 점수는 %5.1f 점입니다.\n", score1.name, score1.average);
Score score2 = { 2, "임꺽정", 69, 72, 45 };
score2.total = score2.cpp + score2.java + score2.jsp;
score2.average = (double)score2.total / 3;
printf("%s 님의 평균 점수는 %5.1f 점 입니다.\n", score2.name, score2.average);
// c언어에서 구조체 변수를 선언할 때 반드시 앞에 struct 를 쓰고 구조체 변수를 선언해야 했었.
// 그래서 typedef 와 별명을 지정하면 앞에 struct 를 쓰지 않고 구조체 변수를 선언할 수 있다.
Jumsu* pScore = &score1; // 구조체 변수의 주소를 넣음.
// printf("%s 님의 평균 점수는 %5.1f 점 입니다.\n", pScore->name);
printf("%s 님의 평균 점수는 %5.1f 점 입니다.\n", pScore->name, pScore->average);
}
|
cs |
'C, C++' 카테고리의 다른 글
C/ C++/ 상수/const (0) | 2020.01.14 |
---|---|
C++/template/함수 템플릿/템플릿에 관하여 (0) | 2020.01.13 |
C++/call by value, call by reference (0) | 2020.01.13 |
C++/달력 만들기 헤더 파일/ (0) | 2020.01.10 |
C++/왕복버블정렬 알고리즘 (0) | 2020.01.08 |