var
S: string;
I: Integer;
begin
S := 'abc';
S := PChar(S);
Memo1.Lines.Add(S);
I := Integer(S);
Memo1.Lines.Add(IntToStr(I));//这里为什么会出现数子
S := 'abc';
Memo1.Lines.Add(IntToStr(Integer(PChar(S))));//这里为什么还是数子,而且跟上面的数子不一样
end;
S: string;
I: Integer;
begin
S := 'abc';
S := PChar(S);
Memo1.Lines.Add(S);
I := Integer(S);
Memo1.Lines.Add(IntToStr(I));//这里为什么会出现数子
S := 'abc';
Memo1.Lines.Add(IntToStr(Integer(PChar(S))));//这里为什么还是数子,而且跟上面的数子不一样
end;
解决方案 »
- 大家帮我看看这段代码,运行提示ora-00933:sql command not properly ended
- 我用Session.DeleteAlias('fgh')为什么不能删除BDE别名?
- SOS 请问ADO 如何 向 informix 的 text 字段插入内容 !!!!!!!
- 只是简单的字符串的问题
- 怎样才能走上Delphi高手之路?
- 如果把数据表字段写到MEMO中
- ADOQuery连接主从表的严重问题
- 如何在dbgrid中控制每一列的输入,如在这个列失去焦点后判断这个列的text.value.
- 中专程序员算吗?学历不高怎么办?开个小会议....
- 请教一个用ADOQuery做缓存设置的问题。谢谢
- 请教:如何显示数据库中指定文件名的图片?
- 如何在2006中安装的ACTIVEX控件
S: string;
I: Integer;
begin
S := 'abc';//S可以看成是字符串指针
S := PChar(S);
Memo1.Lines.Add(S);
I := Integer(S);//取得的是地址,当然会是数字
Memo1.Lines.Add(IntToStr(I));//这里为什么会出现数子
S := 'abc';//地址变了,重亲分配了空间
Memo1.Lines.Add(IntToStr(Integer(PChar(S))));//这里为什么还是数子,而且跟上面的数子不一样//地址不一样,肯定数字会不一样了.
end;
I := Integer(S); 等效于 @S[1] 即取字符串S的地址 IntToStr(Integer(PChar(S))));就不知取到哪里去了 临时的PChar指针地址?
1.I:= Integer(S); 是取得S的内存地址值。
2. 数字不一样,是因为你又重新定义了 S := 'abc';这个时候S重新申请内存,内存再次分配,地址值肯定不一样了。
如果你把第二次的S := 'abc';注释掉,你就会发现数字是一样的了。。