请问
var hh : String;
hh := 'efwefwefw';pointer(hh)^,@(hh[1])分别表示的什么意思?
我认为pointer(hh)^表示的就是第一个字符的物理地址,但是它又和
@(hh[1])不相等。晕了。。
var hh : String;
hh := 'efwefwefw';pointer(hh)^,@(hh[1])分别表示的什么意思?
我认为pointer(hh)^表示的就是第一个字符的物理地址,但是它又和
@(hh[1])不相等。晕了。。
所以字符串的起始地址和字符串第1个字符的地址不一样。
但是存储的空间因该是连续的,但我发现pointer(hh)^ 和@(hh[1])
的地址相差太远,根本不是32bits。
pointer(hh)^表示的是字符串变量地址里的内容,就是第一个字符的存储地址。
你明白了吗??????
是不是pointer(hh)=@(hh[1]),
pointer(hh)才是第一个字符的物理地址!!!! 若hh := '1234';
pointer(hh)^ 就为 $34333231;
pointer(hh)^表示的就是第一个字符的物理地址纯粹是天方夜谭
hh := 'efwefwefw';
1、pointer(hh)相当于: PChar(hh)。只不过pointer(hh)没有指定类型而已。你可以用下列代码测试:
if pointer(hh) = PChar(hh) then ShowMessage('相等');
也就是说pointer(hh)是指向'e'的。
pointer(hh)^这样的用法实际上是不对的,^应该操作在有类型而不是无类型指针上,否则无法正确操作,因为^操作符对于不同类型的指针而言含义有所不同。也就是说它在理论上相当于PChar(hh)^,结果为‘e’。—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
——————————————————————————————————————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
var
C: Char;
begin
C := hh[1];
你现在能说@C是指向hh第一个字符的指针么?
end;—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
p:=@(hh[1]);//相当于pchar(hh);
看汇编,就会明白一切
你是对的,我对于@(hh[1])的问题说错了。
@(hh[1]) = pointer(hh) = PChar(hh)。—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————