数组长度问题

guifuli 2003-12-04 05:52:28
一个数组
const
LenOfArray = 16;
var
A : array of Byte;
begin
SetLength(A, LenOfArray);
ShowMessage(LenOfArray);
ShowMessage(Sizeof(A));
end;
为什么上面两处 ShowMessage 的值不一样(第一处为16,第二处为4)?
...全文
29 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dqzhz 2003-12-12
  • 打赏
  • 举报
回复
To weekease(安子):
對於動態數組 它默認得下標是從0開始 這個時候数组名指向它的地址
對於静态数组 如果你強制定義arr:array[0..16](一般建議定義静态数组的下標不要從0開始) 這個時候数组名不是它的地址
「已注销」 2003-12-11
  • 打赏
  • 举报
回复
同意
weekease 2003-12-09
  • 打赏
  • 举报
回复
share一下,如果数组从0开始定义,数组名可以代替数组第一个内容的指针;如果不是从0开始定义,就必须用@取数组的指针。另外,还可以这样动态定义数组
var
pI: ^integer;
begin
pI := AllocMem(sizeof(integer)*10);
...
FreeMem(pI);
pI := nil;
end;
fj218 2003-12-07
  • 打赏
  • 举报
回复
由于是动态数组,数组被分配在堆中,栈中只分配了一个指针
所以A的大小只有4字节。如果是静态数组又不一样了。
Var
A:array [1..16] of byte;
begin
showmessage(sizeof(A)); //16byte,数组在栈中分配了16个字节空间,所以A的大小为16
showmessage(sizeof(@A)); //指针大小4byte
end;
jacky_shen 2003-12-05
  • 打赏
  • 举报
回复
ShowMessage(LenOfArray); 数组实际内容长度。
ShowMessage(Sizeof(A)); 指针A占内存的大小。

16,742

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧