将数组的两个元素互换后,如何保证指向他们的指针的内容不变? ( 积分: 50 )

  • 主题发起人 主题发起人 echolan
  • 开始时间 开始时间
E

echolan

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个数组TEST:Array[0..4] of TMyClass;
有一类型为PMyClass = ^TMyClass;
的指针PTest指向Test[1],Test[1]字段TestValue的值为2,Test[2]字段TestValue的值为3,如何定义PTest:=@Test[1],现在PTest^.TestValue=2;如果互换Test[1]和Test[2],那么PTest^.TestValue=3;
请问要如何定义和修改才能保证PTest^中TestValue的值仍然为2?
 
有一个数组TEST:Array[0..4] of TMyClass;
有一类型为PMyClass = ^TMyClass;
的指针PTest指向Test[1],Test[1]字段TestValue的值为2,Test[2]字段TestValue的值为3,如何定义PTest:=@Test[1],现在PTest^.TestValue=2;如果互换Test[1]和Test[2],那么PTest^.TestValue=3;
请问要如何定义和修改才能保证PTest^中TestValue的值仍然为2?
 
定义一个中间变量t,然后把Test[1]的值赋给t,把Test[2]的值赋给Test[1],把T的值赋给Test[2]
或者定义和各字段类型相同的变量作为中间变量,逐一交换个字段的值.
 
这样很不方便,如果其他地方定义了一个数组TPList:Array of PMyClass,数组的类型为PMyClass,当Test内容发生改变后就必须要重新调整TPList中的各个指针的指向,实现起来太麻烦了!想知道有没有什么方法能获取数组各元素内容的地址,即使Test[1]的内容被调整到了Test[2],该指针也不用调整也可以准确地找到原来的Test[1]
 
为什么要用PTest呢,直接定义一个AMyClass :TMyClass;再将Test[1]赋值给它:
AMyClass :=Test[1];这样,Test[1]跑到哪,AMyClass不就始终指到哪吗。
AMyClass :TMyClass;这样声明,AMyClass本身就是一个指针,不必要创建,直接将创建好
的对象赋给它就行了。不过管理要注意,原对象销毁后,应该置AMyClass为nil。
 
谢谢Jonson_sunshine,这样可以了!想知道如果要指针取,现在取到的只是数组单元的地址,如何才能取到对象的地址?
 
你要是想始终指向TestValue=2的 那干吗还这么麻烦

那个PTest不要为指针,就直接声名成:
PTest:=TMyClass;

然后PTest:=Test[1]就行了,以后无论怎么换 ptest.testvalue始终等于2
 
对象的地址就是你数组的地址吧.....
你用 showmessage(string(pointer(@test)^));看看....
 
首先,正如我上一贴说的,“AMyClass :TMyClass;这样声明,AMyClass本身就是一个指
针,不必要创建,直接将创建好的对象赋给它就行了”,这里通常说的对象,内存中表现
为一个数据块,AMyClass :TMyClass;就是指向这个内存块的指针(通常称为对象,指向一个
内存块)。你这样写(注释在后面):
PMyClass = ^TMyClass
//PMyClass为指向TMyClass的指针类型,其变量保存TMyClass
//类型变量的地址
PTest :PMyClass
//PTest为PMyClass的变量,可以保存TMyClass类型变量的地址
PTest:=@Test[1] //Test[1]为TMyClass类型变量(即一个对象,指向一个对象
//内存块),取其地址赋值给PTest。
所以,如果你说要“取到对象的地址”,实际上Test[1]就是对象的地址,Delphi隐藏了
这种地址标示。例如,你可以这样声明并使用:
var
P :Pointer
//声明一个指针变量
begin
P :=Test[1]
//指针赋值
showmessage(inttostr(TMyClass(P).TestValue));//指针类型转换后可以访问对象成员
end;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部