静态数组和动态数组


  静态数组和动态数组不同,静态数组是在栈内存中自动分配,一旦静态数组声明了,编译器就自动在栈进行分配了。如你声明的a,就分配了16个字节的内存空间。而动态数组不同,动态数组实际上就是指针。只不过是个特殊点的指针,和string类型差不多。声明了一个动态数组,只是声明了一个四字节的指针。必须通过setlength给动态数组分配内存空间。所以  
  type   TArray   =     array   of   char;这个TArray就是一个指针类型。  
  type   PArray   =       ^TArray;这个Parray就是一个指向指针的指针类型。  
  在静态数组中@a就是自动分配空间的首地址,也就是@a[0]的地址,如果a:   array[1..15]   of   char;那就是@a[1]的地址。可以说@a就是这个静态数组的地址。  
  如果声明了一个动态数组b:Tarray,那么b只是一个指针,@b是指向这个指针的地址。如果b分配了空间的话,@b[0],才是分配空间的首地址。  
  b:=@a就是将动态数组b指向了静态数组。注意只是指向不是分配。  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  var  
      i:   integer;  
      Tmy_array:Tarray;  
   
  begin  
      Tmy_array   :=   @a;  
      for   i   :=   0   to   14   do  
      begin  
          a[i]   :=   'b';  
      end;  
      a[15]   :=   Char(63);  
      Tmy_array[0]   :=   'a';  
      showmessage(a[0]);  
  end;  
  这样写容易理解吧!其实Tarray就是指针类型,Tmy_array就是指针。  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  var  
      i:   integer;  
      Tmy_array:pointer;  
   
  begin  
      Tmy_array   :=   @a;  
      for   i   :=   0   to   14   do  
      begin  
          a[i]   :=   'b';  
      end;  
      a[15]   :=   Char(63);  
      TArray(Tmy_array)[0]   :=   'a';  
      showmessage(a[0]);  
  end;  
  这样写也不难理解吧。将Tmy_array无类型指针转换成Tarray类型指针。  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  var  
      i:   integer;  
      Tmy_array:pointer;     //这个Pointer可以改成Tarray,Parray都可以,只要是指针类型就行  
      Pmy_array:PArray;  
   
  begin  
      Tmy_array   :=   @a;  
      Pmy_array:=@Tmy_array;     //Pmy_array为指向指针的指针  
      for   i   :=   0   to   14   do  
      begin  
          a[i]   :=   'b';  
      end;  
      a[15]   :=   Char(63);  
      Pmy_array^[0]   :=   'a';  
      showmessage(a[0]);  
  end;  
  说到这里,你应该明白了第一个例子通不过,而第二个例子可以通过了吧 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值