首页
社区
课程
招聘
[求助]delphi 指针 pointer 的疑问
2009-5-5 20:24 9660

[求助]delphi 指针 pointer 的疑问

2009-5-5 20:24
9660
delphi 中我们知道 pointer($000FFAB11) 会直接返回一个指向内存地址000FFAB11的指针.

但如果这样用:
var s:string;
s:='abcd';
pointer(s); 这样又代表什么意思呢?

测试时发现,pointer(s); 返回的是abcd在内存中的址,有点不太明白是怎么个说法..

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞0
打赏
分享
最新回复 (10)
雪    币: 2367
活跃值: (756)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
小虾 10 2009-5-5 20:58
2
0
意思就是将s字符串类型的指针强制转换成Pointer类型的指针。
雪    币: 102
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiaohez 2009-5-6 09:00
3
0
delphi 教课书里有写。再去看看书!我都还记得。呵呵
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
preserve 2009-5-6 10:31
4
0
delphi里的string可以看成是动态数组
s可以看成个指针变量 该指针变量指向实际的字符串
雪    币: 126
活跃值: (149)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wr960204 2009-5-6 10:41
5
0
String本来就是一个指针.
指向的内容是String的数据内容.负偏移存放的是长度,引用计数(D2009加了多语言相关的).
因为String本来就是指针,所以也就没啥说的了
雪    币: 1275
活跃值: (41)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
suiyu 2009-5-6 11:43
6
0
string的结构在Delphi源代码剖析上讲的很清楚了
pointer(s)指的应该S的引用计数,也就是String[0]
0的前一个字节是字符串的字符数字
所以我们可以获得其字符个数方法如下:
function StrLen(const str: string): integer;
asm
  move eax,eax-4
end;
雪    币: 22
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
许胜 2009-5-7 05:45
7
0
string是指针。牢记牢记,谢谢。
观察strtoint(s);     那integer是指针不。s的本性不应该变的!
雪    币: 204
活跃值: (76)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
edongxu 2009-5-7 11:56
8
0
var s:string;
其中s就是指针了,指向字符串首地址,可以当PChar来用
但是delphi给它赋予更多的功能,比如生命周期的管理。。。。。。
雪    币: 296
活跃值: (89)
能力值: ( LV15,RANK:340 )
在线值:
发帖
回帖
粉丝
木桩 8 2009-5-7 21:32
9
0
Delphi源代码剖析字符串相关部分有介绍,实际上String(长字符串)是个指针。

var s:string; // 这个在栈上分配一个s的指针
// (注意String是长字符串,存储方式和普通的短字符串不同)
s:='abcd'; // 指针内容指向堆中的字符串结构,格式如下
// 偏移: -8 -4 0 1 2 3 4
// 内容: 0 4 a b c d #0
// 解释:引用计数 长度 串内容 #0

// s的指针就指向偏移为0的位置


所以你 pointer(s) 强制转型得到的是指向 'abcd',#0 的指针。不知道这样说你明白没
雪    币: 5
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xingyuwan 2009-5-8 07:14
10
0
这几天有个认识了,看了你的介绍.更明白了.

另外,再请教一下:
这里,@S也是取S的内存地址,
和pointer(s)取的有什么区别?
雪    币: 9
活跃值: (939)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
网络游侠 2009-5-8 08:10
11
0
数据类型转换的问题,百度里面一大堆。。

比如api 里面有个函数用到字符串指针,pchar(a)

强制转换成该数据类型!
游客
登录 | 注册 方可回帖
返回