c++ union 메모리 질문입니다

조회수 414회
struct RECT
{
    LONG    left;
    LONG    top;
    LONG    right;
    LONG    bottom;
} 

struct Rect
{
    Rect(RECT r) {
        memcpy(&data, &r, sizeof(RECT));
    }
    operator RECT() const { return data; }
    union 
    {
        //LONG d[4];
        LONG l,t,r,b;
        RECT data;
    };
};

안녕하세요 두개의 구조체를 호환되게 쓰고 싶은데 RECT 와 Rect의 변수들의 메모리 주소를 같게 하고 싶습니다.

물론 d[0] d[1] 로 REAC의 left top은 마출수가 있는데 Rect l, t,r,b와 같이 쓰려고 할땐 주소값이 첫번째 RECT left와 같더라구요 방법이 있을까요 꼭 RECT 의 right와 Rect의 r을 같게하고 싶습니다..

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    아래 코드와 결과 참고하세요.

    간단한 코드니까 보시면 바로 이해되실 겁니다.

    #include <iostream>
    
    using namespace std;
    
    struct RECT {
        int left;
        int top;
        int right;
        int bottom;
    };
    
    struct Rect {
        Rect(RECT r) :data{ r } {}
        operator RECT() const { return data; }
        RECT data;
        int& l{ data.left };
        int& t{ data.top };
        int& r{ data.right };
        int& b{ data.bottom };
    };
    
    int main()
    {
        RECT r{ 1,2,3,4 };
    
        Rect rr{ r };
    
        cout << &rr.data << '\n';
        cout << &rr.data.left << '\t' << &rr.l << '\n';
        cout << &rr.data.top << '\t' << &rr.t << '\n';
        cout << &rr.data.right << '\t' << &rr.r << '\n';
        cout << &rr.data.bottom << '\t' << &rr.b << '\n';
    
        RECT rrr = RECT(rr);
        cout << rrr.left << ',' << rrr.top << ',' << rrr.right << ',' << rrr.bottom << '\n';
    }
    
    • 결과

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 감사합니다~~~~!!! vectorlist 2021.10.15 08:09

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)