1,
var
S:string;
begin
S:='aaa';
end;问:S在栈中是怎么存放的,如变量名S怎么放,指向堆中'aaa'内存块的指针地址又是怎么存放? S与'aaa'的指针地址是怎么关联的?2,string,Pchar,Pbyte,array of char与^array of char有什么区别,怎么互相转换?
var
S:string;
begin
S:='aaa';
end;问:S在栈中是怎么存放的,如变量名S怎么放,指向堆中'aaa'内存块的指针地址又是怎么存放? S与'aaa'的指针地址是怎么关联的?2,string,Pchar,Pbyte,array of char与^array of char有什么区别,怎么互相转换?
解决方案 »
- delhpi 中怎么定义一个int数组
- 急呀!!!请高手指点!
- 如何利用CLIENTSOCKET 和SERVERSOCKET进行文件的上传和下载?在线等,分不够再加。
- 如何写带参数的视图。
- 小問題~合並記錄怎麼解決~
- 为什么oracle数据库是varchar()类型的,用asString没办法插入啊,好痛苦,一个星期了,还不能解决//
- 有关测试工具的写法,是用thread好 还是用其他好,我想要当时进行的,也叫同步吧!这样行吗?
- 请问各位高手,怎样才能过滤IE中的网页。
- Quick Report升级
- 如何将一个文件夹同步复制到10个U盘根目录上
- 开始订报了,推荐本杂志???????????????????
- 培训
string,Pchar,Pbyte,array of char与^array of char有什么区别,怎么互相转换?string 字符串类型
PChar 字符串指针类型
PByte 字节指针类型
array of char 字符数组
^array of char字符数组指针
str:string[3];str:='aaa';
ShoWMessage(str[0]);怎么显示的是其他符号而不是长度呢?
改成 ShoWMessage(IntToStr(ord(str[0]))); 就是显示长度了
格式为: 32位引用计数+32长度+字符串的值
得到字符串的长度:
len:=pinteger(integer(str)-4)^;
ref:=pinteger(integer(str)-8)^;
'aaa'不在堆中,而是在静态数据区,这个地方既不是堆,也不是栈。字符串的幕后管理非常复杂,你一下子搞不懂。慢慢来吧
PChar 字符串指针类型
PByte 字节指针类型
array of char 字符数组
^array of char字符数组指针
只知道这些了。
string 字符串类型
PChar 字符串指针类型
PByte 字节指针类型
array of char 字符数组
^array of char字符数组指针
本想把自己对字符串的一些认识系统地写一篇文章,但无奈时间不足。
找了以前回过的一些贴子,楼主可以参考一下:http://topic.csdn.net/u/20080413/17/a91d878d-9a9f-436c-97a7-75be2dc0e34b.html
着重看这贴的20楼有一个例子
http://topic.csdn.net/u/20080414/10/f518df18-d7be-40c9-80a7-6c2142c8dec6.html
http://topic.csdn.net/u/20080412/22/863b4b21-296d-43cf-96ef-8ff24cb425ce.htmlhttp://rabbitfox.blog.sohu.com/38253374.html里面所说不一定完全正确。关于长字符串(动态字符串)string,我所说的“一下子搞不懂”,是指,它使用了“Copy On Write”技术,在@Str[1]负偏移数个字节处,分别存放着长度、引用计数等信息,这需要楼主根据我提出的关键词找资料学习一下。