Type
    MyRecord=Record
       case field:integer of 
            1:(name:string);
            2:(Avg:integer);
          end;对上面的变体写法不太明白用意,是不是只是为初始化的时间不用分配太多的内存?谁能详细说它的好处及用法吗?   

解决方案 »

  1.   


    是根据field的取值,来确定record的内部字段的
      

  2.   

    http://www.cnblogs.com/del/archive/2008/01/09/1032376.html
    学习变体结构 ,参考一下
      

  3.   

    TMessage = packed record
        Msg: Cardinal;
        case Integer of
          0: (
            WParam: Longint;
            LParam: Longint;
            Result: Longint);
          1: (
            WParamLo: Word;
            WParamHi: Word;
            LParamLo: Word;
            LParamHi: Word;
            ResultLo: Word;
            ResultHi: Word);
      end;是最能说明的问题了。其实他就是C里面的联合体。当初设计是为了节约存储空间,我们都知道,若干年前内存条是多么的珍贵,可以说是比处女膜都还贵,所以当时在C里提倡了联合体的设计。
      

  4.   

    这个能编译通过么?印象中string和动态数组这种由rtl管理的类型不能作为联合体成员的
      

  5.   


    Seamour ,说的对,这个是编译不过去的,string这类非固定长度的类型,是不行的
      

  6.   

    Type 
        MyRecord=Record 
          case field:integer of 
                1:(name:string[100]);//纠正一下 
                2:(Avg:integer); 
              end; 
      

  7.   

    联合体有特殊的应用,在写代码的时候省很多事,而不是为了省内存设计的string和动态数组变量都是4字节,不是非固定长度的类型(delphi中没有非固定长度的类型)。不能做联合体成员的原因我已经说了,它是由rtl负责初始化和清理的,作为联合体的成员会造成类型的混乱