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 답변
-
아래 코드와 결과 참고하세요.
간단한 코드니까 보시면 바로 이해되실 겁니다.
#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'; }
- 결과
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력