『Lena's by ☆볶기!!』: Restart !!

Rorolena
1-8 다양한 타입의 정보를 한 곳에 모으는 법

-/구조체의 기본/-

주초체의 정의
-----------------------------------------------------------------------
// 'StudentInfo'라는 이름의 구조체를 정의한다.
Struct StudentInfo
{
 char bloodType;
 int stdNumber;
 float grade;
};

int main()
{
 // StudentInfo 구조체 타입의 변수 2개를 선언한다.
 StudentInfo si1;
 StudentInfo si2;

 return 0;
}
-----------------------------------------------------------------------
point

1. Struct라는 키워드로 구조체 정의가 시작됨을 알린다.
그후 구조체 안에 사용할 변수와 타입을 선언한다.

2.  StudentInfo si1; 이런식으로
구조체 타입의 변수를 정의한다.

tip

구조체는 main() 함수의 바깥쪽에 정의한다.
물론 main()함수의 안쪽에서 정의해주는 것도 가능하다.
허나 이는 밖과 안에서 사용하는 것은 몇가지 차이점이 있다.
이부분은 후에 다루기로 한다.

구조체의 멤버에 접근하는 법
-----------------------------------------------------------------------
#include <iostream>
using namespace std;

// 'StudentInfo'라는 이름의 구조체를 정의한다.
struct StudentInfo
{
 char bloodType;  // 혈액형
 int stdNumber;  // 학번
 float grade;  // 평점
};

int main()
{
 // StudentInfo 구조체 타입의 변수 2개를 정의한다.
 StudentInfo si1;
 StudentInfo si2;

 // si1의 멤버에 값을 넣는다.
 si1.bloodType = 'O';
 si1.stdNumber = 20031128;
 si1.grade = 3.5f;

 // si2의 멤버에 값을 넣는다.
 si2.bloodType = 'A';
 si2.stdNumber = 19961219;
 si2.grade = 2.3f;

 // 멥버의 값을 출력한다.
 cout << "학번 : " << si1.stdNumber << "\n";
 cout << "학점 : " << si1.grade << "\n";
 cout << "혈액형 : " << si1.bloodType << "\n";
 cout << "학번 : " << si2.stdNumber << "\n";
 cout << "학점 : " << si2.grade << "\n";
 cout << "혈액형 : " << si2.bloodType << "\n";

 return 0;
}
-----------------------------------------------------------------------
point

1. 멤버에 접근하는 문법은 아주 간단하다.
구조체 변수의 이름을 쓴 후에 점을 찍고
멥버의 이름을 적어주어 사용하면 된다.

구조체의 초기화
-----------------------------------------------------------------------
#include <iostream>
using namespace std;

// 'StudentInfo'라는 이름의 구조체를 정의한다.
struct StudentInfo
{
 char bloodType;  // 혈액형
 int stdNumber;  // 학번
 float grade;  // 평점
};

int main()
{
 // StudentInfo 구조체 타입의 변수 2개를 정의한다.
 StudentInfo si1 = { 'O', 20031128, 3.5f };
 StudentInfo si2 = { 'A', 19961219, 2.3f };

 // 멤버의 값을 출력한다.
 cout << "학번 : " << si1.stdNumber << "\n";
 cout << "학점 : " << si1.grade << "\n";
 cout << "혈액형 : " << si1.bloodType << "\n";
 cout << "학번 : " << si2.stdNumber << "\n";
 cout << "학점 : " << si2.grade << "\n";
 cout << "혈액형 : " << si2.bloodType << "\n";

 return 0;
}
-----------------------------------------------------------------------
point

1. 구조체의 초기화란 구조체의 변수를 정의하면서
각 멤버의 값을 초기화하는 것을 말한다.
이는 배열을 초기화하던 방법과 비슷하여
구조체의 초기화를 사용할 때는 중괄호 안에
각 멤버의 초기 값을 넣어주면 된다.

2. 구조체의 초기화 역시 변수를
정의할 당시 외에는 사용할 수 없다.
예로 아래와 같이 사용할수 없다.
StudentInfo si1;
si1 = { 'O', 20031128, 3.5f };

tip

1. 구조체도 한 줄에 여러 변수를 정의 할수 있다.
이 경우에도 구조체의 초기화를 사용하는 것이 가능하다.
예로 아래와 같이 사용할수 있다.
StudentInfo si1 = { 'O', 20031128, 3.5f }, si2 = { 'A', 19961219, 2.3f };

2. 쓰레기 값
일전에 '초기화 되지 않은 값'에 대해 설명을 하면서,
쓰레기 값에관하여 언급하였다.
구조체 변수 역시 일반 변수와 마찬가지로
초기화되기  전까지는 쓰레기 값으로 채워져있다.

구조체의 대입
-----------------------------------------------------------------------
#include <iostream>
using namespace std;

int main()
{
 // 구조체를 정의한다.
 // 2차원에서의 점에 대한 정보
 struct Point
 {
  int x; // x 좌표
  int y; // y 좌표
 };

 // 변수 두 개를 정의한다.
 Point pt1 = { 30, 50};
 Point pt2;

 // pt1을 pt2에 대입한다.
 pt2 = pt1;

 // 멤버 값을 출력한다.
 cout << "pt1 = ( " << pt1.x << ", " << pt1.y << ")\n";
 cout << "pt2 = ( " << pt2.x << ", " << pt2.y << ")\n";

 return 0;
}
-----------------------------------------------------------------------
point

1. 위와 같은 식으로 구조체 변수간의 대입을 할수있다.

구조체와 변수의 정의를 동시에 하는 법
-----------------------------------------------------------------------
#include <iostream>
using namespace std;

int main()
{
 // 구조체를 정의한다.
 // 2차원에서의 점에 대한 정보
 struct Point
 {
  int x;  // x 좌표
  int y;  // y 좌표
 } pt1 = { 30, 50}, pt2;

 // pt1을 pt2에 대입한다.
 pt2 = pt1;

 // 멤버의 값을 출력한다.
 cout << "pt1 = ( " << pt1.x << ", " << pt1.y << ")\n";
 cout << "pt2 = ( " << pt2.x << ", " << pt2.y << ")\n";

 return 0;
}
-----------------------------------------------------------------------
point

1. 위와 같이 구조체와 변수의 정의를 동시에 할수있다.
허나 이방법의 문제는 정의한것 외의
Point 타입의 변수를 만들 수 없다.
이 구조체를 지칭할 이름이 없기 때문이다.

이때문에 이런 방식은 잘이용 되지 않고 또한
앞에서 이야기한 것처럼 구조체는 main() 함수의
바깥쪽에 정의하고 구조체 변수는 안쪽에
정의 하는 경우가 일반적이기 때문이다.