여러가지 형태의 자료형을 그룹으로 만드는 것
struct gujoche
{
char name;
int number;
}; // 세미콜론 주의
struct키워드를 통해 구조체 정의의 시작을 알리고 gujoche라는 이름의 구조체를 정의합니다.
중괄호 안에 구조체에 넣고싶은 자료형로 변수를 선언합니다.
gujoche a;
gujoche b;
구조체의 이름을 자료형처럼 사용하여 변수를 선언합니다.
구조체를 이용해 변수를 *선언*할 때 구조체 안에 저장된 변수들로 메모리에 공간을 할당합니다.
위의 경우 a가 선언되면서 [ char | int ] 순서로 메모리의 공간이 확보됨(b도 마찬가지)
a.name;
a.number;
구조체의 각 변수들을 멤버(멤버 변수)라고 부릅니다.
변수이름.멤버이름 의 방법을 통해 접근이 가능합니다.
a.name = 'Jin';
a.number = 1;
b.name = 'Ram';
b.number = 2;
각 멤버에 접근하여 자료형의 형태에 맞는 값들을 저장해줍니다.
gujoche c = {'Young', 3};
중괄호 안에 각 멤버의 초기값을 자료형에 맞도록 순서대로 넣어줍니다.
1) 그냥 변수의 이름으로 cout에 넘기는 경우 오류가 발생합니다.
2) 초기화는 변수를 정의할 때에만 가능합니다.
gujoche a;
a = {'Jin', 1}; //이런 방식은 불가능 하다.
배열과는 다르게 구조체끼리 대입하여 복사가 가능합니다.
a = b;
a의 멤버에 같은 이름을 가진 b의 멤버를 복사(대입)
같은 구조체일 경우에만 가능합니다.
어떤 타입의 자료형이던지 구조체의 멤버가 될 수 있습니다.
배열, 구조체, 객체, 포인터 등등
포인터를 공부하고 보시길 추천드립니다.
구조체의 멤버에 포인터가 포함되어 있고 그 포인터가 다른 구조체를 가리키게 된다면 어떻게 될까요?
struct dog {
char name[10];
dog* dogptr;
};
dog A, B, C;
A.name = "chunil"
A.dogptr = &B
B.name = "chunee"
B.dogptr = &C
C.name = "chunsam"
C.dogptr = &A
A.name 은 자신의 name을 의미합니다.
(*A.dogptr).name 은 B의 name을 의미합니다.
(*(*A.dogptr).dogptr).name 은 C의 name을 의미합니다.
(*(*(*A.dogptr).dogptr).dogptr).name은 자신의 name을 의미합니다.
이런식으로 꼬리에 꼬리를 물고 있는것을 linkedlist라고 합니다.
struct Point {
float x;
float y;
};
Point A = {0, 0}
Point B = {0, 0}
A.x
B.y
이런식으로 활용하면 프로그래밍에 있어 큰 이득을 볼 수 있습니다.