#1 구조체란?
편의상 관련 있는 데이터와 함수를 묶어놓은 것이다. 클래스와 달리 모든 멤버의 접근제한자는 기본적으로 public이다.
#2 구조체 선언하기
struct
키워드를 통해 구조체를 선언한다. 구조체에 포함 된 변수와 함수를 멤버변수, 멤버함수라고 한다.
struct MyStruct
{
// 멤버변수
int first;
int second;
// 멤버함수
int Sum() { return first + second; }
}
#3 구조체의 크기 구하기
구조체는 최소한 멤버변수의 크기의 합보다 크거나 같다. sizeof()
함수를 통해 크기를 알 수 있다.
MyStruct a; // 구조체 생성
cout << sizeof(a) << endl; // 구조체의 크기 반환
return 0;
#4 구조체 멤버 호출하기
접근연산자(.
)를 통해 멤버에 접근한다. 멤버변수, 멤버함수 모두 동일하다.
MyStruct a;
a.first = 100;
a.second = 200;
cout << a.Sum() << endl; // 300
#5 구조체 포인터 만들기
구조체 포인터를 만들 수 있다. 포인터를 만드는 것과 동일하다.
MyStruct a;
MyStruct *p = &a; // 구조체 포인터 선언 및 초기화
#6 포인터로 멤버에 접근하기
구조체 포인터로 구조체 멤버에 접근하려면 접근연산자(.
) 대신에 (→
)를 사용한다.
MyStruct a;
a.first = 100;
a.second = 200;
cout << a.Sum() << endl; // 300
/* 포인터를 통해 멤버 접근 */
MyStruct *p = &a; // 구조체 포인터 선언 및 초기화
p->first = 300;
p->second = 400;
cout << p->Sum() << endl; // 700
cout << a.Sum() << endl; // 700
#7 구조체 배열 만들기
구조체를 원소로 하는 배열도 만들 수 있다.
MyStruct pairs[10];
배열은 내부적으로 포인터를 활용하여 인덱싱을 한다. 하지만 인덱싱을 통해 원소를 반환받은 경우에 원소의 참조가 아니라 원소 자체이므로 접근연산자는 (.
)이다.
for(int i = 0; i < 10; i++)
{
pairs[i].first = i;
pairs[i].second = 10*i;
cout << pairs[i].Sum() << endl;
}