본문 바로가기

C, C++

C++/구조체

구조체

 프로그래밍을 할 때 실제로 처리할 수많은 데이터들은 단일 자료형으로 구성되기보다는, 여러 자료형이 뒤섞여 있는게 다반사이다. 예를 들어, 한 학생의 성적처리를 한다고 하면, 이름(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"임꺽정"697245 };
    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