请问一个记录指针的类型是什么/!!!!!((20分)

  • 主题发起人 主题发起人 xiangding
  • 开始时间 开始时间
X

xiangding

Unregistered / Unconfirmed
GUEST, unregistred user!
Tpcon=^Mcon;
Mcon=record
tableName : string;
end;

如果我要用TPcon做为参数,那它应该为什么类型呢?
比如:
调用NNNN(Tpcon);

procedure NNNN(apcon: 这里是什么类型?);
var
aa: apcon;
begin
new(aa);
ComboBox1.items.addobject('aa',Tobject(aa));
Dispose(apcon(aa));
end;
 
指针的运用
指针是一种指示内存位置的数据类型。Pascal的通用指针类型称为Pointer,有时候也叫无类型指针,因为它只指示内存地址,但编译器并不管指针所指的数据。因此,大部分情况下应当使用有类型的指针。
指针属于高级编程技巧,对于编写Delphi应用程序来说并不是必需的。随着你的经验的增加,指针将成为一个很有价值的工具。
有类型的指针是用^或关键字Pointer在程序的Type部分申明的。对于有类型的指针来说,编译器能够精确的跟踪指针的数据类型。下面是一些典型的指针示例:
Type
Pint= ^Integer; //Pint现在是指向Integer的指针
Foo= Record //一个记录类型
GobledyGook: String;
Snarf: Real;
End;
Pfoo= ^Foo; //Pfoo是一个指向Foo类型的指针
Var
P: Pointer; //一个无类型的指针
P2: Pfoo; //Pfoo的变量
指针变量只存储内存地址,而为指针所指的数据分配空间则是程序员的事情。如果一个指针没有指向任何数据,它的值就是Nil,这是称为零(nil)指针或空(null)指针。
要访问一个指针所指的数据,你可以在指针变量名称后跟^运算符。下面代码演示:
Type
MyRec= Record
I: Integer;
S: String;
R: Real;
End;
PmyRec= ^MyRec;

Var
Rec: PmyRec;
Begin
New(Rec); //为Rec分配内存
Rec^.I:= 10; //给Rec中的域赋值
Rec^.S:= ‘AAAAAAAAAAAAA’;
Rec^.R:= 6.384;
Dispose(Rec); //不要忘记释放内存
End;
什么时候用New():
New()函数用于为指针分配指定长度的内存空间。由于编译器知道空间的大小,因此,调用New能够分配正确的字节数,这比使用GetMem()或AllocMem()函数更加安全和方便。但是,对于Pointer或Pchar类型来说,不能用New来分配内存,因为编译器无法估计要分配多少字节。凡是用New()分配的内存应当用Dispose()来释放。
 
可能是这样:procedure NNNN(var apcon: Tpcon);
 
内存指针是Pointer类型!
 
但是用dispose(apcon(aa)) 时却报错呀
 
dispose(aa)才对
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
Tpcon=^Mcon;
Mcon=record
tableName : string;
end;

type
TForm1 = class(TForm)
Button1: TButton;
ComboBox1: TComboBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure NNNN(apcon:Tpcon);
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

{ TForm1 }

procedure TForm1.NNNN(apcon: Tpcon);
begin
new(apcon);
apcon^.tableName:='adfadf';
ComboBox1.items.add(apcon^.tablename);
Dispose(apcon);
end;

procedure TForm1.Button1Click(Sender: TObject);
var aa:Tpcon;
begin
NNNN(aa);
end;

end.
 

Similar threads

后退
顶部