pchar 和^char 的区别?

Topgun504 2003-12-12 12:56:48
var
c :string;
d :pchar;
e :^char;
f :pchar;
i:integer;
begin
setlength(c,100);
for i:= 1 to 50 do
c[i] := 'a';
f := @c;
e := @c[1];
d := @c[1];
showmessage(f + ' ' + e^ +' '+ ' '+ d + ' '+ d^);
showmessage(c);
end;

显示的结果:8! a aaaaaaaaaaaaaaaaaaaaa...aaE a
aaaaaaaaaaaaaa....E
请教一下pchar 和^char 的区别,为什么显示的是这样的结果?

...全文
37 22 打赏 收藏 举报
写回复
22 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wolf2005 2003-12-12
pchar是指向一个字符串首地址的批针,以#0结束

^char不知道,学习
  • 打赏
  • 举报
回复
RamjetZhang 2003-12-12
不过现在想想如果自己强制转型(并且知道字符串长度的话),^char也能当pchar用,尤其是^char就在字符串首部的时候(由str[1]得到的^char事实上与相应的pchar数值是相同的,至少用cardinal强制转换后);

当然如果不强制转换而直接dereference提领^char的话,的确只能搞到一个char了(至少Delphi的作风是这样,用个指针括号加@跟^包得像个洋葱头)。
  • 打赏
  • 举报
回复
qiume 2003-12-12
错了:
PChar可以指向字符串,也可指向字符;
^Char只能指向单个字符
  • 打赏
  • 举报
回复
qiume 2003-12-12
e的本质是指针;
而d,f的本质是字符串
  • 打赏
  • 举报
回复
qiume 2003-12-12
e的本质是指针;
而d,f的本质是字符
  • 打赏
  • 举报
回复
mingjianzeng2003 2003-12-12
学习
  • 打赏
  • 举报
回复
Topgun504 2003-12-12
明白,多谢高手指点
  • 打赏
  • 举报
回复
ehom 2003-12-12
就是这个意思
  • 打赏
  • 举报
回复
Topgun504 2003-12-12
就是说^char类型不能隐式类型转换为String?
  • 打赏
  • 举报
回复
ehom 2003-12-12
这完全是编译器的问题

虽然PChar和^Char完全一样,却只能将PChar直接隐式类型转换为String
  • 打赏
  • 举报
回复
Topgun504 2003-12-12
为什么要进行类型转化,^char 和 pchar 不一样吗?
  • 打赏
  • 举报
回复
ehom 2003-12-12
>>f := @c 是什么地址?

上面不是说了吗?是个指针的储存地址~~~

>>用^char怎么显示字符串c的值

ShowMessage(PChar(e));
  • 打赏
  • 举报
回复
sduzjw 2003-12-12
pchar 好象是以NULL结尾的字符来,用于C中的,char应该是单个字符吧
  • 打赏
  • 举报
回复
ehom 2003-12-12
>>指向单个char的指针;感觉没什么用处,容量太少(容量还没自己大,一个指针都是4个char了。

这话说的不对,指针又不是用来指向固定数据的
  • 打赏
  • 举报
回复
Topgun504 2003-12-12
f := @c 是什么地址?
用^char怎么显示字符串c的值
showmessage(e)好像不行
  • 打赏
  • 举报
回复
sundayboysII 2003-12-12
f为pchar类型,但你给的是string的地址,但string类型的内容是从1开始的,0是borland内部定义的,好像是长度,所以你把0位的地址给了f,所以f的内容就无法正常显示。
e为char类型的指针,E^取的是首位。
d也为pchar类型,但这次给的是正确的起始位置,所以得到的内容是50个a
d^取的也是首位。

从测试情况来看,pchar和^Char作用一样的。
  • 打赏
  • 举报
回复
ehom 2003-12-12
本质上没区别,但在某些特殊情况下编译器会对它们做不同的处理

上面的问题来源你对String本质认识的错误,String不是一般简单的变量,用SizeOf看看,它是个指针,@c等于是取指针的储存地址

f := PChar(c);
f := @c[1];

都可达到你想要的结果
  • 打赏
  • 举报
回复
hkbarton 2003-12-12
pchar 和 ^char是一样的
showmessage(f + ' ' + e^ +' '+ ' '+ d + ' '+ d^);
这句中f是个地址,当然显示出来是个你不知道的符号 f^是这个地址的值,但f := @c;并不是c的第一个字母,而应是f := @c[1]

...也不知道pchar 和 ^char到底是不是一样的,我认为是的喔,看看了
  • 打赏
  • 举报
回复
RamjetZhang 2003-12-12
^char:
e.g.
type
PSingleChar = ^char;
PSingleChar:指向单个char的指针;感觉没什么用处,容量太少(容量还没自己大,一个指针都是4个char了。)
  • 打赏
  • 举报
回复
solokey 2003-12-12
char和指针
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
Delphi
加入

5065

社区成员

Delphi 开发及应用
申请成为版主
帖子事件
创建了帖子
2003-12-12 12:56
社区公告
暂无公告