Delphi的數組名和C/C++的數組名

C/C++中的數組名至關於一個指針常量

咱們都知道,在C/C++中若是定義一個數組,那麼這個數組的數組名就是這個數組的起始位置的指針,好比編程

int i[10];

那麼數組名 i 就是一個指針(準確的說是指針常量,由於它只能指向這個數組的首地址,不能被更改再去指向其餘的地址),其就等於 &i[0] (取 i 數組的第一個元素的地址)數組

那麼Delphi中的數組和數組名呢?

那就本身編寫一個程序嘗試一下測試

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

相關文章
相關標籤/搜索