Delphi 예제 자료

C의 구조체와 공용체를 델파이로 간단 설명.

kimsyo11 2021. 12. 18. 21:38
728x90

{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씩 늘어나는것이다.

어때요 참 쉽죠?

728x90