C의 구조체와 공용체를 델파이로 간단 설명.
{C의 구조체}
struct MyStruct {
BYTE a;
BYTE b;
BYTE c;
}
↓ 번역한다면
{델파이 구조체}
MyStruct = record
a: BYTE;
b:BYTE;
c:BYTE;
end;
{C의 공용체}
struct MyStruct {
union {
BYTE a;
BYTE b;
BYTE c[1];
} u;
}
↓ 번역한다면
{델파이 공용체}
MyStruct = record
case Integer of
0: (a:BYTE);
1: (b:BYTE);
2: (c: array [0..1] of BYTE);
end;
[구조체]는
a,b,c 변수 3개의 Byte 선언하여
합 크기 3으로 나온다
하지만 [공용체]는
a,b,c 변수중 크기에서 제일 큰것이 array[0..1] of byte 가 큼으로 크기 2로 출력이 된다
[공용체]는
a,b,c[0] 주소가 동일하며
c[1]은 주소가 byte임으로 +1 주소가 다르다
[결론]
[구조체]와[공용체]는 크기도 다르며 주소도 다르다
※이 상자 내용 읽어도 이해가 안되면 밑에 사진부터 보고 천천히 이해 하시면 됩니다
[공용체 사진 캡처]

그럼으로 공용체에
0019FE92 = a,b,c[0] 이며
0019FE93 = c[1] 이다
c[0] := $AD;
c[1] := $CD; 값을 넣었다고 치면
a,b,c[0] 값은 주소가 동일하기 때문에 BYTE임으로 3개의 변수가 AD값으로 출력이 되는것이다.

공용체는 값이 선언된것중 가장 큰것이 기준이다
고로 저 3개의 변수중 가장 큰것이 C의 변수이기 때문에
주소 c[0]의 기준이며 a와,b가 동등하다
[구조체 사진 캡처]

위 사진을 보듯이 구조체는 각각 선언된 주소대로 부여되어 있는것을 알수가 있다
그래서 각각 주소가 부여되고 값을 부여하고 사용이 된다.
a와 b 와 c[0] 와 c[1]은 주소가 +1 씩 늘어나는것은 Byte로 선언이 되어 1씩 늘어나는것이다.
어때요 참 쉽죠?
