一个数组
const
LenOfArray = 16;
var
A : array of Byte;
begin
SetLength(A, LenOfArray);
ShowMessage(LenOfArray);
ShowMessage(Sizeof(A));
end;
为什么上面两处 ShowMessage 的值不一样(第一处为16,第二处为4)?
...全文
295打赏收藏
数组长度问题
一个数组 const LenOfArray = 16; var A : array of Byte; begin SetLength(A, LenOfArray); ShowMessage(LenOfArray); ShowMessage(Sizeof(A)); end; 为什么上面两处 ShowMessage 的值不一样(第一处为16,第二处为4)?
share一下,如果数组从0开始定义,数组名可以代替数组第一个内容的指针;如果不是从0开始定义,就必须用@取数组的指针。另外,还可以这样动态定义数组
var
pI: ^integer;
begin
pI := AllocMem(sizeof(integer)*10);
...
FreeMem(pI);
pI := nil;
end;
由于是动态数组,数组被分配在堆中,栈中只分配了一个指针
所以A的大小只有4字节。如果是静态数组又不一样了。
Var
A:array [1..16] of byte;
begin
showmessage(sizeof(A)); //16byte,数组在栈中分配了16个字节空间,所以A的大小为16
showmessage(sizeof(@A)); //指针大小4byte
end;