关于指针地址操作(50分)

2

2373088

Unregistered / Unconfirmed
GUEST, unregistred user!
对于指针地址,在vc中有memset和memcpy可进行操作,在delphi却无相应的函数,
请问各位大侠如何解决这些问题,在大富翁论坛上关于这方面的讨论好象比较少,
如果哪位大侠知道哪个地方可查到这方面的资料,请一并告知。
 
GetMem,FreeMem等怎么没有!
 
ok,如楼上老兄所言,如何将结构值转成pchar类型,再转回结构会不会有问题呢?
而这些操作在vc里是通过内存拷贝函数很容易实现的。况且GetMemFreeMem只是创建
指针地址和释放指针地址,与New和Dispose类似。
 
For Example:
var str : array [1..15] of char;
pstr : PChar

begin
StrCopy(@str, 'teststr')

StrCat(@str, '_testok');
GetMem(pstr, sizeof(char));
StrCopy(pstr, @str);
Write(pstr);
FreeMem(pstr);
end;
 
YB_unique,你举的例子只是字符之间的转换,能结构和字符之间转换,或
结构和结构之间转换吗?
 
大哥,Delphi又不是Basic,别把它想得太弱了,指针可不是C的专利。

procedure Move(const Source
var Dest
Count: Integer);
请注意Source和Dest的传值方式——我上回实在没办法,只好直接用汇编写 :(
 
Move应该是按值传递,而不是按地址传递。creation-zy, 不知我说的对不对?
至于您所说的传值方式能否详细告知?
例一: 例二:
New(pTmp)
New(pTmp);
new(pTmp1)
new(pTmp1);
StrCopy(pTmp,'1')
pTmp := '1';
Move(pTmp^,pTmp1^,SizeOf(pTmp))
Move(pTmp^,pTmp1^,SizeOf(pTmp));
Dispose(pTmp)
Dispose(pTmp);
Dispose(pTmp1)
Dispose(pTmp1);
其中pTmp和pTmp1均为PChar类型,但例二释放指针时会出现异常,这是为什么?
 
指针地址操作:
复制内存可以用CopyMemory,将一块内存清0可以用ZeroMemory。
Delphi和Win api都有这两个函数,
不过Delphi的CopyMemory是对Move的封装,ZeroMemory是对FillChar的封装。
 
Move相当与vc中的memcpy,小弟还有另一个问题何时使用GetMem和New,
且两者之间的区别何在?
 
GetMem 可以自己指定分配空间的大小 GetMem(p,size)
New 不能
 
new 会执行构造函数
 
关于转换
Pointer(变量)^
 
张一健, 能否说的详细点吗?
 
to Jedei:
可以copy 一個 Tlist嗎? Tlist是一個樹型的結構的記錄?

 
Tlist 是个对象吧.
 
它是一個對象,它的一個Item可以指向一個記錄,也可以是其它Tlist。不知道能不能實現
如:
type
Precord =^Trecord;
Trecord = record
Astr,Bstr : string;
DtlList : Tlist;
end;
.......
Arecord : Precord;
lstTem : Tlist;
.....
new(Arecord);
lstTem.add(Arecord);
Arecord.Astr :='fdasd';
Arecord.Bstr := 'fsafdffff';
Arecord.DtlLIst := Tlist.create

我想把整個LstTem Copy 到別外一個LstTemOther;當然不是用這個LstTemOther指向
同一個地址。修改LstTem 不會引響LstTemOther。這樣當然可以用上面的方法Loop lstTem
用它的每一個值賦給LstTemOther。這樣很煩的。不知道 能不能copy 內存實現?所以想
請問各位大俠!
 
LstTemOther := LstTem,好象就可以实现拷贝了。我在我自己写的类就这样传递。
 
不行的!
你想改變lstTem的某一個Item的值,同樣會修改LstTemOther的值。因為它們指向同一
個內存地址!!
 

Similar threads

X
回复
0
查看
772
xalion
X
S
回复
0
查看
645
SUNSTONE的Delphi笔记
S
S
回复
0
查看
655
SUNSTONE的Delphi笔记
S
顶部