超易问题(10分)

  • 主题发起人 主题发起人 JackKen
  • 开始时间 开始时间
J

JackKen

Unregistered / Unconfirmed
GUEST, unregistred user!
type
node=class
private
p:^integer;
i:integer;
end;
var
current:^node;
我想问的是current.p和current^.p有什么区别?current.i和current^.i呢?
 
在传统Pascal语法里,current.xxx是错误的,在object pascal里current.xxx等同于current^.xxx。
 
谢谢版主,还想请教,Delphi分配内存和回收是不是用new()和dispose()。我以前一直使用C++搞数据结构的,对Pascal不熟。只好请教。
 
Delphi分配内存有多个函数。
我常用下面两个:
new()和Dispose()
AllomMem()和FreeMem()
 
又有新问题,Delphi中两个指针不能互相赋值的吗?例如
x1:^integer;
y1:^integer;
new(x1);
。。。。
y1:=x1 //这里报出错。
应该如何是y1指向x1即要他们地址相同应怎样?
 
好像是的
两个指针不能相互赋值
如:
object1:=x;
object2:=object1;
会出错的。
赋值的时候对象没复制,只是指针值复制了,而对象本身只能释放一次,第二次释放就出错。
 
有两个解决办法:
1。y1=Pointer(x1)
2:
x1, y1:^integer;
new(x1);
。。。。
y1:=x1 //这里就不报出错了。
 
版主,我对方法2不太明白。为什么将x1,y1一起声明就不出错呢?
 
这个问题的确有点怪,想不通!
 
这是因为,Pascal的语法非常严格,对于“复杂”的数据类型,必须声明成一个“简单”的数据类型,编译器才认为两个数据完全相同。
比如:
type
PInteger=^Integer;
....
var
x1:PInteger;
y1:PInteger;
begin
...
y1:=x1;
...
end;

又如:
type
TArray10=Array [0..9] of Integer;
procedure UseArray10(A10:TArray10);
begin
...
end;
....
var
testA10:TArray10;
...
UseArray10(testA10);
...
才行,如果直接使用 ^Integer,或 Array [0..9] of Integer
都不被编译器认为是同一数据类型而导致编译错误。
 
Pascal这招真够毒![:D]
 
多人接受答案了。
 
后退
顶部