关于字符串的地址?

KKKK2000 2003-08-19 07:25:40
请问
var hh : String;
hh := 'efwefwefw';

pointer(hh)^,@(hh[1])分别表示的什么意思?
我认为pointer(hh)^表示的就是第一个字符的物理地址,但是它又和
@(hh[1])不相等。

晕了。。。。。。。。。。。

...全文
181 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyuer0851 2003-08-23
  • 打赏
  • 举报
回复
同意楼上的,果然是 与众不同,呵呵,谢谢
lxpbuaa 2003-08-23
  • 打赏
  • 举报
回复
@(hh[1])看似是指向字符串第一个字符的指针,实际上是错误的想法。hh[1]生成了一个临时字符变量,而@(hh[1])就是取得这个临时变量的地址!跟hh已经毫无关系了!相当于:
var
C: Char;
begin
C := hh[1];
你现在能说@C是指向hh第一个字符的指针么?
end;

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
lxpbuaa 2003-08-23
  • 打赏
  • 举报
回复
var hh : String;
hh := 'efwefwefw';
1、pointer(hh)相当于: PChar(hh)。只不过pointer(hh)没有指定类型而已。你可以用下列代码测试:
if pointer(hh) = PChar(hh) then ShowMessage('相等');
也就是说pointer(hh)是指向'e'的。
pointer(hh)^这样的用法实际上是不对的,^应该操作在有类型而不是无类型指针上,否则无法正确操作,因为^操作符对于不同类型的指针而言含义有所不同。也就是说它在理论上相当于PChar(hh)^,结果为‘e’。

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
zjqyb 2003-08-23
  • 打赏
  • 举报
回复
你自己去比较一下pointer(hh) 和 @(hh[1])的值就知道了
是不是pointer(hh)=@(hh[1]),
pointer(hh)才是第一个字符的物理地址!!!!

若hh := '1234';
pointer(hh)^ 就为 $34333231;
pointer(hh)^表示的就是第一个字符的物理地址纯粹是天方夜谭
zjqyb 2003-08-23
  • 打赏
  • 举报
回复
弄清楚就好了,只要是人难免会犯错,只要大家互相学习,相信明天会更好!!!
lxpbuaa 2003-08-23
  • 打赏
  • 举报
回复
zjqyb() ( ▲▲▲▲▲) :
你是对的,我对于@(hh[1])的问题说错了。
@(hh[1]) = pointer(hh) = PChar(hh)。

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
zjqyb 2003-08-23
  • 打赏
  • 举报
回复
也可以说@(hh[1])是hh所指向字符串'efwefwefw'的地址
看汇编,就会明白一切
zjqyb 2003-08-23
  • 打赏
  • 举报
回复
我觉得@(hh[1])是指向字符串第一个字符的指针,没有错

p:pchar;
p:=@(hh[1]);//相当于pchar(hh);
rustle 2003-08-20
  • 打赏
  • 举报
回复
同意movingboy2(movingboy2)
Hewin 2003-08-20
  • 打赏
  • 举报
回复
String 第0到-3時它的長度,第-4到-7是它的長度!它的數據物理地址在@S[1]開始
KKKK2000 2003-08-20
  • 打赏
  • 举报
回复
楼上的,hh是一个字符串变量,pointer(hh)的意思是存储该字符串地址的指针,
pointer(hh)^表示的是字符串变量地址里的内容,就是第一个字符的存储地址。
你明白了吗??????
zjqyb 2003-08-20
  • 打赏
  • 举报
回复
跟你说是pointer(hh)
KKKK2000 2003-08-20
  • 打赏
  • 举报
回复

但是存储的空间因该是连续的,但我发现pointer(hh)^ 和@(hh[1])
的地址相差太远,根本不是32bits。
movingboy2 2003-08-19
  • 打赏
  • 举报
回复
Delphi的string是优化过的,在字符串的头部留了32bits来放引用计数,
所以字符串的起始地址和字符串第1个字符的地址不一样。
zjqyb 2003-08-19
  • 打赏
  • 举报
回复
是pointer(hh) 不是pointer(hh)^

16,748

社区成员

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

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