반응형
구조체 태그 : 구조체 식별자
구조체 멤버 : 구조체를 구성하는 항목
구조체를 정의하고 나중에 구조체 변수 선언.
struct [태그이름]
{
구조체 멤버 선언;
};
struct [태그 이름] 변수이름1, 변수이름2;
구조체를 정의하는 동시에 구조체 변수 선언.
struct [태그이름]
{
구조체 멤버 선언;
} 변수이름1, 변수이름2;
구조체는 연관된 여러 변수와 배열들을 묶어놓은 하나의 자료형이라고 생각하면 됩니다.
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 Friend { char name[16]; int age; char msg[64]; }; int main() { struct Friend f1; strcpy_s(f1.name, 16, "유소정"); f1.age = 18; strcpy_s(f1.msg, 64, "메이즈러너 3 같이 보실?"); cout << "이름 : " << f1.name << endl; cout << "나이 : " << f1.age << endl; cout << "하고싶은 말 : " << f1.msg << endl; return 0; } | cs |
Friend라는 구조체를 만들고, f1이라는 구조체 변수를 선언했습니다.
구조체 변수의 멤버에 접근하고 싶다면 .(멤버 연산자)를 이용하면 됩니다. ex) f1.age = 18;
실행 결과입니다.
구조체 안에 구조체를 정의할 수도 있습니다.
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 31 | #include <iostream> using namespace std; struct Point { int x; int y; }; struct Rect { struct Point LeftTop; struct Point RightBottom; int area; }; int main() { struct Rect rect1; rect1.LeftTop.x = 10; rect1.LeftTop.y = 100; rect1.RightBottom.x = 50; rect1.RightBottom.y = 15; rect1.area = (rect1.RightBottom.x - rect1.LeftTop.x) * (rect1.LeftTop.y - rect1.RightBottom.y); cout << "직사각형의 넓이 : " << rect1.area << endl; return 0; } | cs |
직사각형은 왼쪽 위 점의 좌표와 오른쪽 아래 점의 좌표만 알면 구할 수 있기 때문에 x, y 변수를 가진 Point 구조체를 정의하고 Rect 구조체에서 선언했습니다.
마찬가지로 접근하려면 .(멤버 연산자)를 이용하면 됩니다.
실행 결과입니다.
typedef?
typedef 이미정의된내용 새로정의해서사용할내용;
ex) typedef int integer; //int를 integer로 사용하겠다는 의미.
typedef는 구조체에서 특히 유용하게 쓰입니다.
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 31 | #include <iostream> using namespace std; typedef struct Point { int x; int y; } Point; typedef struct Rect { struct Point LeftTop; struct Point RightBottom; int area; } Rect; int main() { Rect rect1; rect1.LeftTop.x = 10; rect1.LeftTop.y = 100; rect1.RightBottom.x = 50; rect1.RightBottom.y = 15; rect1.area = (rect1.RightBottom.x - rect1.LeftTop.x) * (rect1.LeftTop.y - rect1.RightBottom.y); cout << "직사각형의 넓이 : " << rect1.area << endl; return 0; } | cs |
코드는 아까 직사각형 코드를 가져왔습니다.
달라진 점이 있는데요, 구조체를 정의할 때 앞에 typedef 키워드를 사용했습니다.
그래서 main 함수에서 구조체 변수를 정의할 때, 앞에 struct Rect라고 쓰지 않고 Rect라고 쓸 수 있는 것입니다.
반응형
'Programming > C++' 카테고리의 다른 글
[C++] 디폴트 매개변수 (0) | 2018.01.22 |
---|---|
[C++] 함수 (0) | 2018.01.21 |
[C++] 동적 할당 (0) | 2018.01.21 |
[C++] 명시적 형변환 (0) | 2018.01.21 |
[C++] std::cin? (0) | 2018.01.21 |