Delphi的数组名和C/C++的数组名

本文对比了Delphi与C/C++中数组名的使用方式。在C/C++中,数组名即为指向数组首地址的指针常量;而Delphi中则需使用@运算符来获取数组的首地址。此外,文章还探讨了Delphi中直接使用数组名进行类型转换的特殊情况。

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;

但是编译的时候就报错,经过尝试之后进行修改

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]

运行后结果如图
图片描述

所以这两者的结果还是一样的,所以Delphi中的数组名还是表示数组的首地址,不过取数组名表示的地址的方法不一样

在Delphi中取数组的地址的时候,不能直接使用数组名,应该通过@,但是还有这样的直接使用数组名的方式

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;

  这样的程序编译成功,可以运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值