delphi指针类型

typebuffer=string[255];ptr=^buffer;varb1:buffer;b2:ptr;b1:='zhang';b2^:='zhang';b2是一个... type
buffer=string[255];
ptr=^buffer;
var
b1:buffer;
b2:ptr;

b1:='zhang';
b2^:='zhang';

b2是一个4B的指针变量(为什么是4个字节?),而b2^则是一个256B的字符串变量(为什么是256个字节)。
前者是静态的,存放的是动态变量的内存首地址;(一个指针变量存储着它所指向的动态变量的地址,这个我知道,但为什么这里b2是静态的?)
后者是动态的,存放的是动态变量中的数据(为什么这里又是动态的呢?)
来人啊

分类达人些:阳光上的桥、yeahrahxephon、biznow、wfhy、翼帆
其他的隐秘这高手些。
这道题,就真的这么难吗?

有点意思
展开
 我来答
约等于没有
2008-09-15 · TA获得超过258个赞
知道小有建树答主
回答量:535
采纳率:0%
帮助的人:505万
展开全部
4个字节是因为我们现在使用的操作系统都是32位(每个字节8位)的。如果你使用64位的机器和操作系统,每个指针的大小就是8个byte了。

256个字节是因为你声明了255,但这个数字实际上表示0..255,你数一下是不是一共256个?

你举的这两个例子都是静态的,没有动态的,只不过一个用了指针,一个没有用。如果是动态的要这么写

procedure TForm1.Button1Click(Sender: TObject);
var
B3:PChar;
begin
GetMem(B3,256);
try
StrCopy(B3,'zhang');
ShowMessage(B3);
finally
FreeMem(B3);
end;
end;
百度网友a1956c389
2008-09-13 · 超过29用户采纳过TA的回答
知道答主
回答量:107
采纳率:100%
帮助的人:0
展开全部
你定义的时候buffer就是255啊,你存不存字符他也是255啊 0到255 正好是256个字节没有错误啊

你要是这样定义
var
b1:string;
begin
b1:='zhang';
end;
你在看他的字节数就是 4字节了

你用指针指向这个内存地址,当然用了多大就是多大了,这个不奇怪呀!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式