Q&A

  • 이정욱님, 철저공략 델파이 7에서요......
정보문화사에서 출간된 철저공략 델파이 7 Check의 편자이신 이정욱님이 이곳에 계시다기에 책 내용중 궁금한거좀 여쭤봅니다.

다름이 아니라요,
P110에 보면 유니온 구조를 구현한 예제 코드가 있더군요.
type
        TVariantRecord = record
                NullStrField : PChar;
                IntField : Integer;
        case Integer of
                0 : (D : Double);
                1 : (I : Integer);
                2 : (c : Char);
        end;

그런데 위의 코드에 대한 정확한 이해가 안돼서요.

만일 위의 코드로 된 경우에 유니온에 해당하는 필드를 어떤 형식으로 참조해야 하나요.
var
    union : TVariantRecord;
begin
    union.IntField.D := 45.3;
    union.IntField.I := 3;
...
머 이런 식으로 참조하면 되나요??

이부분에 대한 리플 부탁드립니다.

    
4  COMMENTS
  • Profile
    최용일 2003.10.08 23:12
    안녕하세요. 최용일입니다.

    union.D := 1.0;
    union.I := 1;
    union.C := 'A';

    위와 같은 식으로 접근하시면 됩니다. IntField에 종속적인 필드가 아님니다.

    단지 위 세개 필드(D, I, C)가 메모리를 공유한다는 차이점밖에 없습니다.

    그러니까 위 세개중 어떤것이든지 하나를 변경하면 나머지에 영향이 미치죠...

    union.C := 'A';
    이렇게 하면 union.I의 하위바이트에는 65가 들어가겠죠... union.D도 마찬가지구요...

    ^^ 항상 즐코하세요...

  • Profile
    델파이Go! 2003.10.08 23:27
    답변 대단히 감사합니다.
    그런데
            TVariantRecord = record
                    NullStrField : PChar;
                    IntField : Integer;
            case Integer of
                    0 : (D : Double);
                    1 : (I : Integer);
                    2 : (c : Char);
            end;
    이렇게 했을 때에 case Integer of라고 했는데 이부분이 정확하게 어떤 의미인가요? 여기에서 기술한 Integer가 IntField : Integer;와 연관성이 이는 건가요??

    그리고
    union u
    {
          X, Y : integer;
          dist_X, dist_Y : Double;
    }

    와 같은 경우에는
            TVariantRecord = record
                    NullStrField : PChar;
                    IntField : Integer;
            case Integer of
                    0 : (X : integer);
                    1 : (dist_X : Double);
            end;
            case Integer of
                    0 : (Y : Integer);
                    1 : (dist_Y : Double);
            end;
    와 같이 해주면 되나요????





  • Profile
    최용일 2003.10.08 23:47
    안녕하세요. 최용일입니다.

    IntField와는 아무런 상관이 없습니다.

    NullStrField, IntField 그리고 case로 된 공용체필드가 각기 독립적입니다.

    case Integer of에서 사용된 Integer는 case문에서 상수값(0, 1, 2)들을 구분하기 위한 데이터형을 나타냅니다. case문 문법상 D, I, C를 구별하기 위해서 사용될뿐입니다. 별다른 의미는 없습니다.

    이런식으로 해도 똑같죠... 구별하기 위해서만 쓰이니까...
    case Char of
        'A' : (D : Double);
        'B' : (I : Integer);
        'C' : (c : Char);
    end;

    ^^ 항상 즐코하세요...

  • Profile
    델파이Go! 2003.10.09 00:25