请给我个指针应用的小程序,谢谢~!(100分)

  • 主题发起人 主题发起人 吖诚
  • 开始时间 开始时间

吖诚

Unregistered / Unconfirmed
GUEST, unregistred user!
请给我个关于指针写堆栈程序的例程序:把不同(或相同)的物件放在一起,然后可以按由上而下的顺序(或者不同的顺序取出)。刚学delphi希望得到高手指点,谢谢~!
 
没人能有吗?。。。。。。
 
如果是作业,请独立完成!
不问思路,只要源码,不是求学应有的态度!
 
谢谢你的教导,但是我这个不是作业,我现在没有人会给我布置作业的,我是想拿源码作参考让我能容易理解些。
 
你可以参考一下Tlist的源码。
 
链表啊
定义一个结构体
PNode = ^TNode;
TNode = Record
Data : Integer //数据 这里可以自己定义
Next : Pointer //指向下一个结点
end;
用New(PNode)来创建指针
用Dispose(PNode)来释放
 
补充一点
定义一个Head : PNode;
来保存头结点
 
有个建议:
用 TList 代替 链表.
type
PNode = ^TNode;
TNode = Record
Data : string[30] ;//数据 这里可以自己定义
end;

var
TestList: TList;
Node: PNode;
begin
TestList := TList.Create;
New(Node);
Node^.Data := '测试';
TestList.Add(Node);
Node := nil;
ShowMessage( PNode(TestList[0])^.Data);
end;
打字麻烦,你自己去试吧!
 
//下面是DLL文件的动态调用方式。用到了函数指针。
var
add:function (a,b:integer):integer;stdcall
//add为函数指针
hm:hmodule

begin
hm:=loadlibrary(dllfile);
add:=getprocaddress(hm,'towadd');
freelibrary(hm);
end;
 
var
p:^string
//字符串指针
i:integer;
s:string;
begin
for i:=0 to 10 do
begin
new(p);
p^:= inttostr(i);
s:=s+p^;
end;
showmessage(s);
end;
 
谢谢了。尝试中。。。
 
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
ccc: Char;
myQueue: TQueue;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
ccc := 'A';
myQueue := TQueue.Create();
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
myQueue.Free();
end;

procedure TForm1.Button1Click(Sender: TObject);
var
buf: PChar;
begin
GetMem(buf, 2);
buf[0] := ccc;
buf[1] := #0;
myQueue.Push(buf);
inc(ccc);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
buf: PChar;
begin
if myQueue.Count = 0 then
begin
ShowMessage('此队列为空队列!!!');
Exit;
end;

buf := myQueue.Pop();
if buf = nil then
begin
ShowMessage('取出的是空指针。');
end
else
begin
ShowMessage('取出: ' + buf);
FreeMem(buf);
end
end;

end.
 
试试吧,如果你对数据结构和指针操作本身不熟悉的话,我建议你就用TQueue类,VCL帮你封装好了的。
 
因为自学Delphi才8天时间。所以很多都还不明白,谢谢你们给我这么多源程序参考。我今天会把这些争取弄明白来
 
谢谢你们~!
 
结帖了~!
 
后退
顶部