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