가변 record를 공부하고 있는데요...
정확히 이해가 되지 않는 부분이 있어서 이렇게 질문을 합니다.
소스는 다음과 같습니다.
--------------------------------------------------------------------
TServerData = record
case Integer of
0: (Msg: array[0..757] of Char);
1: (data1: Tdata1Info);
2: (data2: Tdata2Info);
3: (data3: Tdata3Info);
4: (data4: Tdata4Info);
5: (data5: Tdata5Info);
6: (data6: Tdata6Info);
7: (data7: Tdata7Info);
8: (data8: Tdata8Info);
9: (data9: Tdata9Info);
end;
--------------------------------------------------------------------
위와 같이 정의를 해 놓았을 경우
case 조건문의 기준은 무엇이 되는 건가요...?
어떤 경우에 Msg라는 변수에 data가 들어가는지요...?
처음 시작을 하는거라 그런지... 전혀 이해가 되지 않습니다...
자세한 설명을 부탁드립니다...
그럼 이만...
가변레코드에서 case는 분기가 아니라 구별하는데 쓰입니다. (쩝~ 설명이 잘 안되네요...)
가변레코드는 C의 union처럼 메모리를 공유합니다.
즉, Data1에 어떤 값을 넣어도 Msg에 그값이 들어갑니다.
TVarRec = record
case integer of
0: (A: LongWord);
1: (B, C: Word);
end;
위와 같은 레코드가 있을때
A에 $FFFF0000을 입력하면 입력하는 순간
B는 $0000이 C는 $FFFF 가 들어갑니다.
--------
| A |
--------
| B | C |
--------
같은 메모리 값을 A라고 통째로 쓸수도 있고 B와 C로 나누어 쓸 수도 있는거죠..
때문에 TVarRec의 크기는 모든 필드들을 합친 8바이트가 되는게 아니라 가장 큰 필드의 크기인 4바이트가 되는거죠...
쩝~ 이해하기 쉽게 설명이 되었나 모르겠네요...
^^ 항상 즐코하세요...