Type
  TPersonlRecord2 = Record
     id:string;
     case Duty:integer of
     1,2,3,4: (Uni:integer;
         Sale:integer);
     5,6,7,8: (Uni2:integer;
         Sale2:integer;
         TOTAL:integer);
  end;
Type
  TPersonlRecord1 = Record
     id:string;
     case Duty:integer of
     1: (Uni:integer;
         Sale:integer);
     2: (Uni2:integer;
         Sale2:integer;
         TOTAL:integer);
  end;//请说出两个记录的区别
//个人观点:他们没有任何区别,希望得到正面或者反面的证实
//希望大家畅所欲言//参加讨论的朋友假定您已经对c中的union完全掌握

解决方案 »

  1.   

    粘贴一个TypeInfo中的类似例子
    TTypeData = packed record
    case TTypeKind of
      tkUnknown, tkLString, tkWString, tkVariant: ();
        //这里是否和tkUnknown: (); 等价?
    ……
      

  2.   

    "如果用c来写应该是一种", 确实。
    case Duty:integer of...什么时候用到Duty??? 所以“没有任何区别”!
      

  3.   

    to : flyinwuhan(★★★★★) case Duty:integer of...什么时候用到Duty??? 所以“没有任何区别”!//////////////////////////
    你随便写一个,说说什么时候有区别谢谢
      

  4.   

    呵呵,误会flyinwuhan(★★★★★) 的意思了。上面的话当我没说。
      

  5.   

    SizeOf(TPersonlRecord1)、SizeOf(TPersonlRecord2)都是20,说明他们的存储方式是一样的~~区别就象加了不同的注释~~//如果如下定义就不同了
    Type
      TPersonlRecord3 = Record
         id:string;
         case integer of //记录里将没有Duty元素
         1: (Uni:integer;
             Sale:integer);
         2: (Uni2:integer;
             Sale2:integer;
             TOTAL:integer);
      end;//如下定义又一样了~~
    Type
      TPersonlRecord4 = Record
         id:string;
         Duty:Integer;
         case integer of
         1: (Uni:integer;
             Sale:integer);
         2: (Uni2:integer;
             Sale2:integer;
             TOTAL:integer);
      end;function StrToHex(mStr: string): string;
    var
      I: Integer;
    begin
      Result := '';
      for I := 1 to Length(mStr) do
        Result := Format('%s%.2x', [Result, Ord(mStr[I])]);
    end; { StrToHex }procedure TForm1.Button1Click(Sender: TObject);
    var
      vPersonlRecord1: TPersonlRecord1;
      vPersonlRecord2: TPersonlRecord2;
      vPersonlRecord3: TPersonlRecord3;
      vPersonlRecord4: TPersonlRecord4;
      vBuffer: array[0..255] of Char;
    begin
      Memo1.Clear;
      vPersonlRecord1.id := $11111111;
      vPersonlRecord1.Duty := $22222222;
      vPersonlRecord1.Uni2 := $33333333;
      vPersonlRecord1.Sale2 := $44444444;
      vPersonlRecord1.TOTAL := $55555555;
      Memo1.Lines.Add(IntToStr(SizeOf(TPersonlRecord1)));
      StrLCopy(vBuffer, PChar(@vPersonlRecord1), SizeOf(TPersonlRecord1));
      Memo1.Lines.Add(StrToHex(string(vBuffer)));  vPersonlRecord2.id := $11111111;
      vPersonlRecord2.Duty := $22222222;
      vPersonlRecord2.Uni2 := $33333333;
      vPersonlRecord2.Sale2 := $44444444;
      vPersonlRecord2.TOTAL := $55555555;
      Memo1.Lines.Add(IntToStr(SizeOf(TPersonlRecord2)));
      StrLCopy(vBuffer, PChar(@vPersonlRecord2), SizeOf(TPersonlRecord2));
      Memo1.Lines.Add(StrToHex(vBuffer));  vPersonlRecord3.id := $11111111;
    //  vPersonlRecord3.Duty := $22222222;
      vPersonlRecord3.Uni2 := $33333333;
      vPersonlRecord3.Sale2 := $44444444;
      vPersonlRecord3.TOTAL := $55555555;
      Memo1.Lines.Add(IntToStr(SizeOf(TPersonlRecord3)));
      StrLCopy(vBuffer, PChar(@vPersonlRecord3), SizeOf(TPersonlRecord3));
      Memo1.Lines.Add(StrToHex(vBuffer));  vPersonlRecord4.id := $11111111;
      vPersonlRecord4.Duty := $22222222;
      vPersonlRecord4.Uni2 := $33333333;
      vPersonlRecord4.Sale2 := $44444444;
      vPersonlRecord4.TOTAL := $55555555;
      Memo1.Lines.Add(IntToStr(SizeOf(TPersonlRecord4)));
      StrLCopy(vBuffer, PChar(@vPersonlRecord4), SizeOf(TPersonlRecord4));
      Memo1.Lines.Add(StrToHex(vBuffer));
    end;
      

  6.   

    呵呵,感谢伴水。我的理解也是注释,感谢大家参与。给大家段rtf代码,copy一下发给朋友吧。
    {\urtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fscript\fprq2\fcharset134 \'cb\'ce\'cc\'e5;}{\f1\fmodern\fprq6\fcharset134 \'cb\'ce\'cc\'e5;}}
    {\colortbl ;\red120\green30\blue190;\red240\green230\blue0;\red250\green180\blue0;\red100\green200\blue250;}
    \viewkind4\uc1\pard\cf1\lang2052\i\f0\fs72 Thank \fs92 You\cf0\i0\f1\pard
    }