C++

[C++] Struct 구조체

햇썽이 2025. 5. 23. 21:18

C++에서 구조체(struct)는 여러 데이터들을 하나로 묶어 관리할 수 있다. 

 

구조체 예시를 들땐 보통 신체검사할때 쓰는 요소들을 예시로 많이 든다. 

struct 묶어서 쓰고싶을땐 맨위에 먼저 안에 들어가는 struct을 먼저 선언해야한다.

밑에 있는 코드의 경우 눈시력관련 변수를 먼저 선언후 struct을 제작한 예시

struct EyeSight
{
    float left;
    float right;
};
struct Person
{
    float height;
    float weight;
    char name[10];
    EyeSight eyeSight;
};

 

 

구조체 초기화 선언

 

- 전체 순서대로 초기화

 
Person person0 = {174.2f, 60.1f, "David", {1.1f, 1.0f}};

 - 구조체 내에 있는것으로 초기화 (C++ 11이상만 사용가능)

Person person = {.height = 174.2f, .weight = 60.1f, .name = "David", .eyeSight = {1.1f, 1.0f}};

 

구조체 특징

 

1. 값 타입으로 되어있기 때문에 전체 복사가 가능함

Person person1 = person0;  // 모든 멤버가 복사됨

 

구조체 참조 & 주소

구조체는 복사할 경우 서로 다른 메모리 주소를 가진다. 아래 두가지 예시로 주의하기

Person person = persons[1];   // 복사
person.eyeSight.left = 2.0f;  // 원본에는 영향 없음

// 반면, 참조(&)를 사용하면 원본 데이터를 직접 수정할 수 있음.
Person& personRef = persons[1];
personRef.eyeSight.left = 2.0f;  // 원본도 수정됨

 

 

2. 하지만 비교 연산은 불가능(예. ==)

if (person0 == person1)

 

비교하고싶을 경우 memcmp 혹은 operator==(C++20)를 써야함

 

3. 배열 사용 가능

Person persons[5];
persons[0].eyeSight.left = 1.2f;
std::cout << persons[0].eyeSight.left << std::endl;

'C++' 카테고리의 다른 글

[C++] Array  (0) 2025.05.29
[C++] enum class & enum struct  (0) 2025.05.28
[C++] enum  (0) 2025.05.27
[C++] Union 유니온  (0) 2025.05.26
[C++] Struct alignas  (0) 2025.05.24