본문 바로가기
IT/C Language

struct 구조형 정리

by Jang HyunWoong 2014. 12. 19.

※ 사용자가 만들 수 있는 자료형 중에 대표적인 것이 구조형이다. 

구조형이란 int, char, double, float과 같은 다양한 자료형으로 이루어진 단일 자료형을 말한다. 

 

다시 말해서 이 구조형으로 선언한 변수는 int, char, double, 등의 다양한 자료형을 동시에 저장할 수 있다. 

 

※ 구조형 만들기

 번호

이름 

등급 

홍길동 

 

이 성적표와 같이 자료가 구조적으로 나열된 상태를 구조체(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';

 

  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5.  
  6. struct grade {
  7. int num;
  8. char name[10];
  9. char level;
  10. };
  11.  
  12. int main() {
  13. // your code goes here
  14. grade hong;
  15.  
  16. hong.num = 1;
  17. strcpy(hong.name, "홍길동");
  18. hong.level = 'A';
  19.  
  20. cout << "번호 : " << hong.num << endl;
  21. cout << "이름 : " << hong.name << endl;
  22. cout << "등급 : " << hong.level << endl;
  23. return 0;
  24. }
번호 : 1
이름 : 홍길동
등급 : A

※ 구조체의 값을 인수로 전달하기
함수의 인수로 보통 변수를 사용한다. 구조형 변수도 변수의 일종이므로 함수의 인수로 사용할 수 있다. int형의 변수를 함수의 인수로 사용하면 다음과 같다. 
Ex)
int fun(int x){
...
}
result = fun(num);

이와 마찬가지로 grade형 변수를 함수의 인수로 사용하려면 

int fun(grade x){
...
}
result = fun(hong);

  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5.  
  6. struct grade {
  7. int num;
  8. char name[10];
  9. char level;
  10. };
  11.  
  12. void show_grade(grade total)
  13. {
  14. cout << "번호 : " << total.num << endl;
  15. cout << "이름 : " << total.name << endl;
  16. cout << "성적 : " << total.level << endl;
  17. }
  18.  
  19. int main() {
  20. // your code goes here
  21. grade hong;
  22.  
  23. hong.num = 1;
  24. strcpy(hong.name, "홍길동");
  25. hong.level='A';
  26.  
  27. show_grade(hong);
  28. return 0;
  29. }
번호 : 1
이름 : 홍길동
성적 : A

※ 구조체의 주소를 인수로 전달하기
구조체의 주소를 전달하는 이유
함수로 인수를 전달할 때는 값에 의한 전달, 주소에 의한 전달, 참조에 의한 전달 방법을 사용할 수 있다. 

주소에 의한 전달 방법은 매우 큰 자료를 담고 있는 변수의 경우에 주로 사용하는데, 자료의 크기가 큰 경우에는 값 대신 주소를 전달하는 것이 메모리를 훨씬 효율적으로 관리할 수 있기 때문이다. 

구조체의 주소를 전달하는 방법
함수의 인수로 구조형 변수의 주소인 포인터를 건네려면, 함수를 정의할 때 가인수로 포인터를 사용해야 한다. 

void show_grade(grade *pTotal)
{
...
}
show_grade(&hong);

show_grade를 정의하면서, 그 함수의 가인수로 pTotal이라는 grade형 포인터를 선언하고 있다.

함수로 구조변수의 주소를 전달 받은 다음에, 그 변수를 이루는 각각의 자료항목은 화살표 연산자(->)를 사용한다. 

cout << "번호 : " << pTotal->num << endl;

  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5.  
  6. struct grade{
  7. int num;
  8. char name[10];
  9. char level;
  10. };
  11.  
  12. void show_grade(grade *pTotal){
  13. cout << "번호 : " << pTotal->num << endl;
  14. cout << "이름 : " << pTotal->name << endl;
  15. cout << "성적 : " << pTotal->level << endl;
  16. }
  17.  
  18. int main() {
  19. // your code goes here
  20. grade hong;
  21.  
  22. hong.num = 1;
  23. strcpy(hong.name, "홍길동");
  24. hong.level = 'A';
  25.  
  26. show_grade(&hong);
  27. return 0;
  28. }
번호 : 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