구조체는 사용자 정의 자료형이다.
구조체를 선언하는 방법은 다음과 같다.
struct 구조체 명 {
타입 변수명;
};
int main(){
struct 구조체명 변수명;
변수명.타입변수명;
return 0;
};
main함수에서 구조체를 사용하려면 struct의 예약어를 사용해야 했는데 사용때마다 번거롭기 때문에 구조체변수명을 사용한다.
struct 구조체명{
타입 변수명;
}구조체변수명;
int main(){
구조체명 변수명;
변수명.타입변수명;
return 0;
};
C++은 개량되어 struct 예약어를 더이상 붙이지 않아도 된다.
그러나 간혹 C와 C++ 둘다 지원을 해야하는 경우가 생겨 다음과 같이 구조체를 작성해서 사용하기도 한다.
typedef struct 구조체명 {
자료형 변수명;
}구조체변수명;
typedef struct _tagMyST {
int a;
float f;
}MySt;
int main(){
// cpp 이상부터는 _tagMyST t; 도 가능하다.
MySt t;
t.a = 10;
t.f = 2.123f;
return 0;
}
구조체는 해당 변수 중 가장 큰 타입의 크기로 설정된다.
typedef struct _tagMyST {
int a = 0;
float f = 0.0;
}MySt;
int main(){
int size = sizeof(MySt); // 8
return 0;
}
구조체 중 4byte의 int형, 8byte의 float형이 있기 때문에 8byte로 할당된다.
// 1번
typedef struct _tagMyST {
int a = 0;
float f = 0.0;
}MySt;
//2번
typedef struct _tagBig {
MySt t;
int i;
char c;
}MyBig;
//3번
//cpp에서 구조체
struct Stst {
MyBig d;
int i;
char c;
}
1번 구조체는 float 8byte, 2번 구조체는 1번 구조체를 넣어서 float 8byte에 1번 구조체 8byte, 즉 16byte의 크기를 가진다.
3번 구조체는 1번, 2번 구조체를 가지고 있어 총 32byte를 가진다.
구조체가 가지는 변수를 초기화하여 값을 할당할 수 있다.
//구조체 선언, main함수 생략
Stst s = { 100, '0' };