咱們都知道,在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