我有一段程序:
var
  dynarr1, dynarr2: array of integer;
  i: Integer;
begin
  SetLength(dynarr1,100);
  i:= Low(dynarr1);
  for i:= Low(dynarr1) to High(dynarr1) do 
     dynarr1[i]:= i;  dynarr2:= dynarr1;
  showmessge(InttoStr(High(dynarr2)));
end;编译时在dynarr2:= dynarr1的地方出错,提示:Incompatible types  为什么呢?动态数组不是一块内存吗? dynarr2:= dynarr1的作用不是相当于dynarr2指向dynarr1的指针吗?请各位大虾详细说明一下动态数组的使用问题!!!!

解决方案 »

  1.   

    动态数组也要先用setlength来分配内存。在前面加SetLength(dynarr2,100);
      

  2.   

    楼主,应该没问题啊,不然你用dynarr2 := @dynarr1[0]; 试试。
      

  3.   

    真是太奇怪了!刚才我用的时候还出错了,怎么在重新打开delphi5在输入相同的代码竟然没有错误!
    不过要谢谢各位了!
      

  4.   

    还有一个问题,通过dynarr2:= dynarr1;是不是两个变量都指向同一个内存区域?
    如果是,为什么在上述代码段后添加了
      SetLength(dynarr1,12);
      ShowMessage(High(dynarr2));显示的数据仍然是9,而不是11?
      

  5.   

    dynarr2:= dynarr1 确实是将dynarr1数组的引用赋给dynarr2;SetLength(dynarr1,6);
    SetLength(dynarr2,12);
    dynarr1:= dynarr2;
    ShowMessage(inttostr(High(dynarr1)));// 结果为11!应该分配完内存再赋值,否则SetLength(dynarr2,3);
    SetLength(dynarr1,6);
    dynarr1:= dynarr2;
    SetLength(dynarr2,12);
    ShowMessage(inttostr(High(dynarr1)));// 结果为2!
      

  6.   

    你只要明白delphi中的动态数组实际是个指针型变量,
    就什么问题都没有了!