구조체 struct 1
이 글은 제 개인적인 공부를 위해 작성한 글입니다.
틀린 내용이 있을 수 있고, 피드백은 환영합니다.
구조체 struct
구조체 (struct)는 여러 변수를 그룹화 하는 데이터 유형이다.
하나 이상의 변수를 그룹 지어서 새로운 자료형을 정의하는 것이다.
구조체 선언 및 정의
구조체는 사용자 정의 자료형이기 때문에, 먼저 struct 키워드를 사용해 구조체를 선언해야 한다.
1
2
3
4
5
struct Book
{
string title = "Unknown";
int pages = 0;
};
구조체 선언의 끝에 세미 콜론을 잊어버리지 말자.
title
과 pages
는 구조체 Book
의 멤버 변수가 된다.
C++ 11부터는 비정적 멤버 변수에 기본 값을 지정할 수 있다.
1
Book book1;
위 코드는 book1이라는 구조체 Book
타입의 변수를 정의한다.
선언과 정의의 차이는, 메모리를 할당하지 않고 대상의 이름만 알려준다면 선언이고, 대상의 메모리가 할당된다면 정의이다.
구조체의 멤버 변수에 접근하기 위해 멤버 선택 연산자(member selection operator: .
)를 사용하면 된다.
1
2
book1.title = "Gone Girl";
book1.pages = 200;
구조체 초기화
구조체를 초기화하는 방식은 아래와 같이 여러 방법이 가능하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
Book book1 = { "Gone Girl", 200 };
cout << book1.title << ' ' << book1.pages << endl;
Book book2;
book2.title = "Hunger Game";
book2.pages = 300;
cout << book2.title << ' ' << book2.pages << endl;
Book book3 { "Maze Runner", 400 };
cout << book3.title << ' ' << book3.pages << endl;
Book book4;
cout << book4.title << ' ' << book4.pages << endl;
book4
같은 경우에는 각 멤버 변수의 기본 값이 출력되게 된다.
구조체와 함수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
struct Book
{
string title = "Unknown";
int pages = 0;
};
void ReadBook(Book book)
{
cout << "Reading a " << book.title << endl;
}
int main()
{
Book book = { "Gone Girl", 200 };
ReadBook(book);
return 0;
}
위 코드처럼 구조체를 함수의 매개 변수로 넘길 수 있다.
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
#include <iostream>
using namespace std;
struct Book
{
string title = "Unknown";
int pages = 0;
};
Book MakeBook(string title, int pages)
{
Book book{ title, pages };
return book;
}
void ReadBook(Book book)
{
cout << "Reading a " << book.title << endl;
}
int main()
{
Book book = MakeBook("Hunger Game", 300);
ReadBook(book);
return 0;
}
또는, 함수는 구조체를 반환할 수도 있다.
중첩된 구조체
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct Person
{
int age;
string name;
};
struct Book
{
Person author = { 0, "Unknown" };
string title = "Unknown";
int pages = 0;
};
int main()
{
Book book { {25, "JJM"}, "MyBook", 50 };
cout << "Author Info:" << book.author.age << ' ' << book.author.name << endl;
return 0;
}
구조체는 다른 구조체를 멤버 변수로 가질 수 있다.
중첩된 구조체를 타고 타고 들어가려면, 멤버 선택 연산자 (.
)를 여러 번 사용하면 된다.
참고
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.