프로그래밍/C++

구조체와 포인터 활용

swedu 2023. 2. 19. 23:11
728x90
반응형

2023.02.19  최초 작성

 

 

구조체를 만들어 사용하면 관련 있는 데이터를 묶어 관리할 수 있다.

아래는 코드는 구조체 포인터를 이용한 동적할당과 함수를 사용한 예이다.

이렇게 코드를 짜면 함수는 구조체 데이터와 별개이지만 의존적인 구조가 되므로 좋은 구조가 아니다.

#include <iostream>
using namespace std;
#define S_CNT 3
typedef struct Student {
	char name[10];
	int kor;
	int eng;
	int math;
} stu;
// 데이터에 의존적인 함수
void printStudent(stu* s) {
	cout << "----------------------" << endl;
	cout << "학생 이름 : " << s->name << endl;
	cout << "국어 점수 : " << s->kor << endl;
	cout << "영어 점수 : " << s->eng << endl;
	cout << "수학 점수 : " << s->math << endl;
}
int main() {
	stu s1({ "Kim", 100,90,80 });
	stu s2({ "Lee", 90,85,97 });
	stu s3({ "Park", 77,88,99 });
	printStudent(&s1);
	printStudent(&s2);
	printStudent(&s3);
	stu* students = new stu[S_CNT];
	for (int i = 0; i < S_CNT; i++) {
		cout << i + 1 << "번째 학생의 이름 입력 : ";
		cin >> (students + i)->name;
		cout << i + 1 << "번째 학생의 국어점수 입력 : ";
		cin >> (students + i)->kor;
		cout << i + 1 << "번째 학생의 영어점수 입력 : ";
		cin >> (students + i)->eng;
		cout << i + 1 << "번째 학생의 수학점수 입력 : ";
		cin >> (students + i)->math;
	}
	for (int i = 0; i < S_CNT; i++) {
		cout << i + 1 << "번째 학생의 이름 : " << students[i].name << endl;
		cout << i + 1 << "번째 학생의 국어점수 : " << students[i].kor << endl;
		cout << i + 1 << "번째 학생의 영어점수 : " << students[i].eng << endl;
		cout << i + 1 << "번째 학생의 수학점수 : " << students[i].math << endl;
	}
	delete[] students;
	return EXIT_SUCCESS;
}

[실행 결과]

----------------------

학생 이름 : Kim

국어 점수 : 100

영어 점수 : 90

수학 점수 : 80

----------------------

학생 이름 : Lee

국어 점수 : 90

영어 점수 : 85

수학 점수 : 97

----------------------

학생 이름 : Park

국어 점수 : 77

영어 점수 : 88

수학 점수 : 99

1번째 학생의 이름 입력 : aaa

1번째 학생의 국어점수 입력 : 11

1번째 학생의 영어점수 입력 : 22

1번째 학생의 수학점수 입력 : 33

2번째 학생의 이름 입력 : bbb

2번째 학생의 국어점수 입력 : 44

2번째 학생의 영어점수 입력 : 55

2번째 학생의 수학점수 입력 : 66

3번째 학생의 이름 입력 : ccc

3번째 학생의 국어점수 입력 : 77

3번째 학생의 영어점수 입력 : 88

3번째 학생의 수학점수 입력 : 99

1번째 학생의 이름 : aaa

1번째 학생의 국어점수 : 11

1번째 학생의 영어점수 : 22

1번째 학생의 수학점수 : 33

2번째 학생의 이름 : bbb

2번째 학생의 국어점수 : 44

2번째 학생의 영어점수 : 55

2번째 학생의 수학점수 : 66

3번째 학생의 이름 : ccc

3번째 학생의 국어점수 : 77

3번째 학생의 영어점수 : 88

3번째 학생의 수학점수 : 99

 
 
728x90
반응형

 

728x90
반응형

'프로그래밍 > C++' 카테고리의 다른 글

생성자 오버로딩 (중복사용)  (0) 2023.02.20
클래스와 객체  (0) 2023.02.19
인라인 함수  (0) 2023.02.17
함수 템플릿  (0) 2023.02.17
디폴트 매개변수  (0) 2023.02.17