谢谢

解决方案 »

  1.   

    union就是说有几个数据成员公用一个内存地址空间,改变了其中一个的值,其他的值也跟着要变
      

  2.   

    delphi里面没有联合类型
    不过有和联合类型相同作用的变体记录
    如下:
    type
      TUnion = record
        case integer of
          0: (W: Word);
          1: (C1, C2: Char);
          2: (B1, B2: Byte);
      end;简单的说B1和C1是共享同一内存地址空间
    B2和C2也是
    W和C1+C2和B1+B2共享同一内存地址例如
      对
    var
      a: TUnion 
    begin
      a.C1 := 'A';
      a.C2 := 'B';
    那么
      a.B1就是字符A的ASCII码,即65  16进制是$41
      a.B2就是字符A的ASCII码,即66  16进制是$42
     
      a.W则是由2个bytes组合的一个字的值16961 16进制是$4241
      

  3.   

    呵呵,类型实际就是不同个Bytes组合起来的!
    实际的物理内存难道还懂数据类型吗?
    实际内存就是1个1个的Bytes组成的,它不会管你是char还是integer或者还是别的什么。
    你看书上解释char和integer等类型时也会这样跟你解释:
    char 占用1个Byte
    integer 占用4个Byte所以你呆板的考虑类型问题
    例如你的代码可以这样写var
      a:char;
    begin
      a:=char(65);
      Showmessage(a);
    end;你看这句
    a:=char(65);
    你如何解释呢?呵呵!内存就如一张打了格子的纸,我想让它4格表示一个数字时,它就是integer类型
    等等!
      

  4.   

    TPerson = packed record
      Name: string;     //姓名
      Sex: Boolean;     //性别
      工种:Integer;     //电工、焊工、司机
      基本工资:Integer;
      case integer of   //工种不同工资项目等信息不同。
        1:(电工津贴:integer)
        2:(焊工津贴:integer;焊工补助:integer);
        3:(车公里数:integer;每月出车次数:byte;车公里补贴:integer);
    end;以上例子不一定恰当,你能理解就好!
    因为工种一但确定,该工人所应有的信息就确定,就使用了下面那段变体记录。
    否则的话,你还要声明所有的值,大大浪费了存储空间。
    其他的你再自己去理解吧,看看书,看看别人的代码。应该收获更大。