[讨论] 关于DELPHI的指针操作 TO:Tiga(风中人..) 我的记忆中PASCAL是语法最严谨的啊。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是不是DELPHI把原本严谨的PASCAL修改得不严谨了? 我也估计是DELPHI修改了原本严谨的PASCAL。其实在DELPHI中,很多地方用到的都是指针,比如窗体在调用中传递的也是指针,如果按标准的PASCAL思想就应该是FORM^.SHOW;要不然这就是BORLAND用新的OOP思想将标准的PASCAL进行扩充的结果。 个人理解pchar是一个连续的指针,而string的不是一个连续的指针。即:s: string;s[i]的值不是s[0]的地址加上i*sizeof(char)的地址内所存储的值而pchar是相等的这取决于String的类型,所以不能直接赋值,必须做出转换s:=string(p);而将s赋值给p则必须一个一个字符的复制 但是有些时候又必须使用P^的调用方式才能得到结果,比如:s := '1234567890';p := @s[1];在这个时候如果我要通过指针P得得结果就必须使用P^.或者用强制类型转换,是不是DELPHI有时在处理指针时有些混淆? 关于你的第一个问题:var p : pchar; s : string;begin p := '1234567'; s := p;//这里是充许的 caption := s; p := s;//这里却是不行的。end; 这也正是我困惑的地方啊,为什么 S := P 可以而 p:= s就不行呢? s := 'abcdefg'; p := @s[1]; caption := p;这样处理也可以得到正确的结果,真是有点不好理解。 s := 'abcdefg'; p := @s[1]; caption := p^;在这个例子中CAPTION 却只能得到一个字符'a',困惑。 s := 'abcdefg'; p := @s[1]; caption := p^;在这个例子中p^相当于一个p[0];而 caption:=p;是delphi在内部处理了,对p进行了强制转换。因为caption相当于string; Object Pascal认为每一个指针类型是相异的,指针间的赋值必须建立一个新的类型,比如var a:^integer;b:^integer;在代码中a和b并不兼容! 求delphi双缓冲画图demo 资源中有一个文件较大 可否用进度条显示释放进度? 恭喜哈欠 不会吗,真的没有人能帮助我吗,谢谢各位大哥进来看看! 恍惚了一宿 Delphi里如何修改xml源文件中关于样式表的路径?急。 如何创建一个指定大小的文件。 writefile 的第四个,第五个参数是啥意思,咋用的 关于for 循环 关于for 循环 关于for 循环 请问各位大哥大姐,好心人请进!一个可能很简单的问题。 招聘程序员(熟练Delphi 和 Asp 编程) 请教关于TComWebResponse的问题(急)
pchar是一个连续的指针,而string的不是一个连续的指针。即:
s: string;
s[i]的值不是s[0]的地址加上i*sizeof(char)的地址内所存储的值而pchar是相等的这取决于String的类型,所以不能直接赋值,必须做出转换
s:=string(p);
而将s赋值给p则必须一个一个字符的复制
p := @s[1];在这个时候如果我要通过指针P得得结果就必须使用P^.或者用强制类型转换,是不是DELPHI有时在处理指针时有些混淆?
var
p : pchar;
s : string;
begin
p := '1234567';
s := p;//这里是充许的
caption := s;
p := s;//这里却是不行的。
end;
p := @s[1];
caption := p;
这样处理也可以得到正确的结果,真是有点不好理解。
p := @s[1];
caption := p^;
在这个例子中CAPTION 却只能得到一个字符'a',困惑。
p := @s[1];
caption := p^;
在这个例子中p^相当于一个p[0];
而 caption:=p;是delphi在内部处理了,对p进行了强制转换。因为caption相当于string;