咱们都知道,在C/C++中若是定义一个数组,那么这个数组的数组名就是这个数组的起始位置的指针,好比编程
int i[10];
那么数组名 i 就是一个指针(准确的说是指针常量,由于它只能指向这个数组的首地址,不能被更改再去指向其余的地址),其就等于 &i[0] (取 i 数组的第一个元素的地址)数组
那就本身编写一个程序尝试一下测试
procedure TForm1.btn1Click(Sender: TObject); var a: array[0..7] of Integer; i: Integer; begin for i:= 0 to 7 do a[i]:= i; ShowMessage(IntToStr(Integer(a)) + ' ' + IntToStr(Integer(@a[0]))); end;
可是编译的时候就报错,通过尝试以后进行修改spa
procedure TForm1.btn1Click(Sender: TObject); var a: array[0..7] of Integer; i: Integer; begin for i:= 0 to 7 do a[i]:= i; ShowMessage(IntToStr(Integer(@a)) + ' ' + IntToStr(Integer(@a[0]))); end;
在Delphi中,是不可以直接使用数组名的。不然会编译报错,要想取数组的首地址,须要 @数组名
, 如上面的程序,或者 @数组名[0]
,可是这也并不表示 数组名 就是数组名[0],由于若是你觉得 数组名就表示数组的第一个元素,那么你能够编程测试一下,必定会报错指针
而在C/C++中,要想获取数组的首地址,能够直接使用 数组名 或者 &数组名[0]code
运行后结果如图orm
因此这二者的结果仍是同样的,因此Delphi中的数组名仍是表示数组的首地址,不过取数组名表示的地址的方法不同图片
在Delphi中取数组的地址的时候,不能直接使用数组名,应该经过@,可是还有这样的直接使用数组名的方式string
procedure TForm1.btn1Click(Sender: TObject); var s: string; a: array[0..10] of Char; i: Integer; begin for i:=0 to 9 do a[i]:= 'j'; a[10]= #0; s:= string(a); //直接使用数组名来进行char数组的数组名来进行类型转换 ShowMessage(s); end;
这样的程序编译成功,能够运行。it