我定义了一个结构体type 
  Lp = record
    I :Integer;
    J :Integer;
  end;
type LLP = ^LP;
//然后又定义了一个包含上面的结构体
type
  MD = record
    ID :Integer;
    MV : array [0..2] of LLP;
  end;
type LMD = ^MD;
//接着我在程序中定义了一个变量
MDTest : LMD;
那我现在如果要对MDTest这个变量所对应的结构体赋值,应该怎么操作呢?谢谢

解决方案 »

  1.   

    对了,我忘了说。我这个MDTest要做为一个参数放入一个procedure中执行才进行取值和赋值操作的
    如果我要把MDTest做为参数取值或是赋值,参数应该怎么样传递
      

  2.   


    begin
      New(MDTest);
      MDTest.ID := 111;
      New(MDTest.MV[0]);//你需要为其分配空间
      MDTest.MV[0].I := 100;
      MDTest.MV[0].J := 123;
    end;
      

  3.   

    procedure test(var MDTest  :LMD);//定义的是参数传递的参数,这样可以对MDTest  赋值
    MDTest : LMD; 您这个定义的应该是全局变量
    先给MDTest分配空间,然后再调用test这个函数
      

  4.   

    还有个问题。
    type 
      Lp = record
        I :array [0..19] of byte;
        J :Word;
      end;
    type LLP = ^LP;
    //然后又定义了一个包含上面的结构体
    type
      MD = record
        ID :Integer;
        MV : LP;
      end;
    type LMD = ^MD;
    如果从VC的DLL里传来指向这个结构体MD,我先把LP里面的I和J保存起来了,然后怎么让指针往前走一步,继续读取LP结构体里面的I和J呢?
      

  5.   


    var
      pMD: LMD;
    begin
      pMD := ....
      ...
      Inc(pMD);
    end;
      

  6.   

    楼上的,不能这样。会报错的。报Iccompaible types这个错
      

  7.   

    如果你的声明没错的话,按照type
      MD = record 
        ID :Integer; 
        MV : LP; 
      end; 
      LMD = ^MD; 
    那么var
      pMD: LMD;
    begin
      ...
      Inc(pMD);是不会报你说的错的
      

  8.   


    var
      MDTest: LMD;
      Lp1:  Lp;
    begin
      Lp1.I := 133;
      Lp1.J := 233;
      New(MDTest);
      MDTest^.ID := 2;
      MDTest^.MV[0] := @Lp1;  //因为LLP是一个Lp类型的指针, 你直接把LP类型的变量地址赋给他就可以的  New(MDTest.MV[1]);
      MDTest.MV[1].I := 1;
      MDTest.MV[1].J := 2;
      Dispose(MDTest);
    end;
      

  9.   


    5楼的是没错, 你是不是INC后, 又释放那指针了?
      

  10.   

    嗯,五楼是没错,我后来看了一下,是我的问题。
    在结构体
    type 
      Lp = record 
        I :array [0..19] of byte; 
        J :Word; 
      end; 
    type LLP = ^LP; 
    //然后又定义了一个包含上面的结构体 
    type 
      MD = record 
        ID :Integer; 
        MV : LLP; //在这里我这样写的
      end; 
    type LMD = ^MD; 
    我想再问一句,在MD这个结构体里,我定义MV :LP和MV :LLP,这两个有什么区别呢?
      

  11.   

    MV :LLP这个是可以直接使用的吗?
    MV :LP就是指针吧?
      

  12.   

    这东西没这么难理解吧, 你把结构体当作普通变量(比如Integer), 结构体指针等于指向这变量的指针(Pinteger)var
      I: PInteger;
      J: Integer;
    begin
      //I^ := 2; //这样你给他赋值,肯定会报错的  New(I); 
      I^ := 3;  //这样就可以正常使用了
      Dispose(I);   J := 232;  
    end;不 知道你明白没,