Programming/C++

[C++] 구조체

Jubil 2018. 1. 21. 21:10
반응형

구조체 태그 : 구조체 식별자

구조체 멤버 : 구조체를 구성하는 항목



구조체를 정의하고 나중에 구조체 변수 선언.


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