※ 사용자가 만들 수 있는 자료형 중에 대표적인 것이 구조형이다.
구조형이란 int, char, double, float과 같은 다양한 자료형으로 이루어진 단일 자료형을 말한다.
다시 말해서 이 구조형으로 선언한 변수는 int, char, double, 등의 다양한 자료형을 동시에 저장할 수 있다.
※ 구조형 만들기
번호 | 이름 | 등급 |
1 | 홍길동 | A |
이 성적표와 같이 자료가 구조적으로 나열된 상태를 구조체(Structure)라고 한다.
번호 - 정수로 표현할 수 있는 int형 변수
이름 - 문자열로 표현할 수 있는 char형 변수
등급 - 한 문자로 표현할 수 있는 char형 변수
int num; // 번호가 들어갈 변수
char name[10]; // 이름이 들어갈 배열
char level; // 등급이 들어갈 변수
struct grade {
int num;
char name[10];
char level;
};
위와 같은 새 자료형 grade로 정의할 수 있다.
※ 구조형 변수 선언하기
구조형으로 선언한 변수는 구조형 변수라고 한다.
grade hong;
※ 구조형 변수의 항목 지정하기
hong.num = 1;
hong.name[10] = "홍길동";
hong.num = 'A';
- #include <iostream>
- #include <cstring>
- using namespace std;
- struct grade {
- int num;
- char name[10];
- char level;
- };
- int main() {
- // your code goes here
- grade hong;
- hong.num = 1;
- strcpy(hong.name, "홍길동");
- hong.level = 'A';
- cout << "번호 : " << hong.num << endl;
- cout << "이름 : " << hong.name << endl;
- cout << "등급 : " << hong.level << endl;
- return 0;
- }
번호 : 1
이름 : 홍길동
등급 : A
※ 구조체의 값을 인수로 전달하기
함수의 인수로 보통 변수를 사용한다. 구조형 변수도 변수의 일종이므로 함수의 인수로 사용할 수 있다. int형의 변수를 함수의 인수로 사용하면 다음과 같다.
Ex)
int fun(int x){
...
}
result = fun(num);
이와 마찬가지로 grade형 변수를 함수의 인수로 사용하려면
int fun(grade x){
...
}
result = fun(hong);
- #include <iostream>
- #include <cstring>
- using namespace std;
- struct grade {
- int num;
- char name[10];
- char level;
- };
- void show_grade(grade total)
- {
- cout << "번호 : " << total.num << endl;
- cout << "이름 : " << total.name << endl;
- cout << "성적 : " << total.level << endl;
- }
- int main() {
- // your code goes here
- grade hong;
- hong.num = 1;
- strcpy(hong.name, "홍길동");
- hong.level='A';
- show_grade(hong);
- return 0;
- }
번호 : 1
이름 : 홍길동
성적 : A
※ 구조체의 주소를 인수로 전달하기
구조체의 주소를 전달하는 이유
함수로 인수를 전달할 때는 값에 의한 전달, 주소에 의한 전달, 참조에 의한 전달 방법을 사용할 수 있다.
주소에 의한 전달 방법은 매우 큰 자료를 담고 있는 변수의 경우에 주로 사용하는데, 자료의 크기가 큰 경우에는 값 대신 주소를 전달하는 것이 메모리를 훨씬 효율적으로 관리할 수 있기 때문이다.
구조체의 주소를 전달하는 방법
함수의 인수로 구조형 변수의 주소인 포인터를 건네려면, 함수를 정의할 때 가인수로 포인터를 사용해야 한다.
void show_grade(grade *pTotal)
{
...
}
show_grade(&hong);
show_grade를 정의하면서, 그 함수의 가인수로 pTotal이라는 grade형 포인터를 선언하고 있다.
함수로 구조변수의 주소를 전달 받은 다음에, 그 변수를 이루는 각각의 자료항목은 화살표 연산자(->)를 사용한다.
cout << "번호 : " << pTotal->num << endl;
- #include <iostream>
- #include <cstring>
- using namespace std;
- struct grade{
- int num;
- char name[10];
- char level;
- };
- void show_grade(grade *pTotal){
- cout << "번호 : " << pTotal->num << endl;
- cout << "이름 : " << pTotal->name << endl;
- cout << "성적 : " << pTotal->level << endl;
- }
- int main() {
- // your code goes here
- grade hong;
- hong.num = 1;
- strcpy(hong.name, "홍길동");
- hong.level = 'A';
- show_grade(&hong);
- return 0;
- }
번호 : 1
이름 : 홍길동
성적 : A
반응형
'IT > C Language' 카테고리의 다른 글
클래스 (0) | 2014.12.19 |
---|---|
긴 이름을 짧게 만들어 주는 typedef (0) | 2014.12.19 |
string 문자열 사용 (0) | 2014.12.19 |
값, 주소에 의한 배열 전달 (0) | 2014.12.19 |
다차원 배열 초기화 / 배열의 이름 (0) | 2014.12.19 |