指针问题(100分)

  • 主题发起人 主题发起人 zhangwh
  • 开始时间 开始时间
Z

zhangwh

Unregistered / Unconfirmed
GUEST, unregistred user!
设有2个变量
str1:pchar;

ptr1:^char


如果给str1附值:
str1:='abcdef';

如果我想通过指针ptr1得到str1的第一个字符值

我是这么做的:

ptr1:=@str1;

但是通过调试看结果 ptr1^不是str1的第一个字符值啊,另外我想问一下,
在选择run的inspect中如键入str1

出现的: str1:pchar $67fc94 中的数字是不是指存储字符串的起始地址啊

在选择run的inspect中如键入ptr1^

出现的: ptr1^:char $67fc94 中的数字是不是指存储字符的地址啊




 
你用ptr1:=str1;试试.

从定义上来讲pchar或char^是等效的.@str1则是一个字符串[red]首字节地址的地址[/red],而你要求的并不是
这个,而是[red]首字节的地址red]
(比如在c语言中如果ptr1=&str1的话就编译会出错的.char*与char**不match)
 
试过,不行,类型不匹配
 
笨蛋,String类型又不是字符数组,和C不一样的,用这个语句试试:
ptr1:=@str1[0];
 
笨蛋,String类型又不是字符数组?????这里好象没有关于string类型的变量啊???

pascal的指针不熟,又没有delphi,所以.....
ptr1^:=str1;试试.

 
var
I: Integer;
S: string;
P: PChar;
begin
S := 'asdfasdf';
P := @S[1];
for I := 1 to Length(S) do
begin
ShowMessage(Char(P^));
Inc(Integer(P));
end;

后面的问题你的想法都是对的!
 
PChar就是^char
直接str1^就是str1的第一个字符
 
xianjun的方法到是可以,把它换成pchar,^char 类型就可
var
I: Integer;
S: pchar;
P: ^char;
begin
S := 'asdfasdf';
P := @S[0];
for I := 1 to Length(S) do
begin
ShowMessage(Char(P^));
Inc(Integer(P));
end;

不过
对于string类型 P := @S[1];
对于pchar类型 P := @S[0];

但是 p:=@s;p^得到的值就不是'a',

而p:=@s[0];p^得到的值就是'a',不知为什么
 
多人接受答案了。
 
后退
顶部