如何在Delphi中定义若干个变量与一个数组共享内存单元?
请高手出招!

解决方案 »

  1.   

    var
       f,e:single;
       b:array[0..6]  of  byte absolute f;
      

  2.   

    数组指针类型的变量pa,指向变量的地址a
    type
      arr12=array [0..11] of byte;
      parr12=^arr12;
    var
      a,b,c:integer;
      pa:Parr12;
    begin
      pa:=@a;
      数组 pa^ 就使用a,b,c的空间了
      

  3.   

    一楼的方法,对于单变量是可取的,多变量就不行了。谢谢二楼的方法我试试,好象是对连续定义的变量可以,如
        Var
          a,b,c : Integer ;
      而非连续定义的变量好象不行,如
        Var
          a,b : Integer ;
          pa:Parr12;
          c : Integer ;
      

  4.   

    Tmyrec=record
       case integer of
       0:
        (x,y,z: word);
       1:
        (ar: array[0..5] of byte);
      end;
      

  5.   

    Tmyrec=record
       case integer of
       0:
        (x,y,z: word);
       1:
        (ar: array[0..5] of byte);
      end;
      

  6.   

    用2楼的办法等你程序挂了还找不出来bug的时候,你就知道啥叫灵活性了6楼的办法其实比较好,delphi不会多占东西。另外,可以直接用record声明变量,而不用多声明个类型1楼的就是没搞清absolute的语义了,e根本就是独立于b的。另外delphi对absolute没作优化,实际上还是会多占用空间。所以,虽然语义是没问题的,但从优化的角度考虑,不要在程序中使用absolute
      

  7.   

    如果:
    case integer of
    0:
    (x,y,z: integer);
    1:
    (ar: array[0..2] of integer);
    end;
    这样用能用吗?
      

  8.   

    如果:
    Type
      Tmyrec=record 
        case Double of
         0:
            (x,y,z: Double);
         1:
            (ar: array[0..2] of Double);
        end;
    这样用能用吗?
      

  9.   

    可以,不过得这样定义
    Tmyrec=record
        case integer of
        0:
            (x,y,z: Double);
        1:
            (ar: array[0..2] of Double);
        end;这是测试代码
    var
      rec: Tmyrec;
    begin
      rec.x:=12.5;
      showmessage(floattostr(rec.ar[0]));
    end;