指针的传递与赋值(100分)

  • 主题发起人 主题发起人 fhb
  • 开始时间 开始时间
F

fhb

Unregistered / Unconfirmed
GUEST, unregistred user!

一、指针语法问题:
unsigned char *x
x+ = 10

在objectpascal 中如何处理这种操作呢?

x:PChar;

x:= x + 10 ?????????????

二、指针的传递与赋值
将字符串string1,string2转换(合并)byte指针x,
以下的程序肯定不对,应该如何写呢?
procedure my
var
x: Pbytearray;
Instring1, InString2:String;
beign
Getmem(x,1024);
InString1:='rewrewr';
InString2:='323lwerewrewr';

StringtoByteArray(x,InString1)
StringtoByteArray(x,InString2)

Freemem(x);
end;

procedure StringtoByteArray(Var out:pByteArray;In:String)
Var
i:Integer;
begin
for i:=0 to Length(in) do
out:=byte(In)

end;
 
你的第一语句我不明白是哈目的?
如果是想将X值加10 ,可如此:
x:pointer;
x^:=x^+10;
如果是想将X的地址+10(不是X本身的值)可如此:
x:pointer;
x:=x+10;


你的第二个问题是想将STRING的内容如“ABC”变成三个字节‘A’,‘B’,‘C’;
x:pchar;
x:=pchar(string1);

以上仅供参考,未经证实。
 
你的第一语句我不明白是哈目的?
如果是想将X值加10 ,可如此:
x:pointer;
x^:=x^+10;
如果是想将X的地址+10(不是X本身的值)可如此:
x:pointer;
x:=x+10;


你的第二个问题是想将STRING的内容如“ABC”变成三个字节‘A’,‘B’,‘C’;
x:pchar;
x:=pchar(string1);

以上仅供参考,未经证实。
 
你的第一语句我不明白是哈目的?
如果是想将X的地址+10(不是X本身的值)可如此:
x:pointer;
x:=x+10;

如果x:pbytearray;
x:=x+10 在Delphi4.0中是不可以的,不知另有何妙方


你的第二个问题是想将STRING的内容如“ABC”变成三个字节‘A’,‘B’,‘C’;
x:pchar;
x:=pchar(string1);

当x:pbytearray 时
如何将STRING的内容如“ABC”变成三个字节30,31,32
 
你的第一语句我不明白是哈目的?
如果是想将X的地址+10(不是X本身的值)可如此:
x:pointer;
x:=x+10;

如果x:pbytearray;
x:=x+10 在Delphi4.0中是不可以的,不知另有何妙方


你的第二个问题是想将STRING的内容如“ABC”变成三个字节‘A’,‘B’,‘C’;
x:pchar;
x:=pchar(string1);

当x:pbytearray 时
如何将STRING的内容如“ABC”变成三个字节30,31,32,并加入到已经存在的指针中?
 
第一个问题
var x:pchar
x:=pchar(string1);
x:=x+10
可以这样做。
若想X:PBYTEARRAY也如此操作,只有将其转化为PCHAR了。
呆非4说的

x:pointer;
x:=x+10;

不行。delphi不允许这样,只有PCHAR可以。

第二个问题程序如下:

var x:PBYTEARRAY
str:strings;
i:integer;
begin
str='ABC';
new(x);
for i:=1 to length(str) do x^.:=byte(str);
end;
 
第一个问题
不知道你的目的,以下分两种情况说明
1、要将x指向的字符加10
P: PByte
//如没有PByte类型,可用P: ^Byte代替
Inc(P^, 10);
2、要将x指针加10
P: PChar
// P: PByte也可以
Inc(P, 10);
第二个问题
仍然没明白你的目的,从你的程序中看,你是要将字符串转换成字节数组,
但存在一个程序错误,String的下标是从1开始的,你的程序当然不对,以下
给出一个效率较高的程序
procedure StringtoByteArray(Var out:pByteArray;const In:String)
begin
Move(out, In[1], Length(In));
//具体的细节你可以仔细研究一下
end;
 
Delphi不允许指针直接做加减,而且pointer只能转换成longint,而不能从longint反换出pointer,如果直接用pointer(longint)的话,就成了指向该longint的指针了。
 
to DNChen:
不是Delphi不允许对指针直接做加减,而是不允许对无类型指针(Pointer)做加减,
C/C++中也是一样的,因为不知道类型当然不能做加减。
具体的指针类型是可以做加减的,如
P: PChar;
Inc(P)

Inc(P, n);
Dec(P, n);
Dec(P);
编译程序会自动判断你的指针类型,将你的指针加上实际类型的长度,这与C/C++
的规定是完全一致的。
 
zhaoyipeng说的没错.

>var x:PChar;
> x:= x + 10
这种写法语法没错,但容易出错.
还是用Inc Dec 来的好.
 
我准备用VC++ 6.0.谢谢各位.
欢迎访问http://www.huzhou.zj.cn/~fhb
 
我准备用VC++ 6.0.谢谢各位.
欢迎访问http://www.huzhou.zj.cn/~fhb
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
I
回复
0
查看
694
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部