很菜的问题,请帮忙.谢谢!在线等!!!

代码民工 2003-10-21 11:09:21
type
myNode=record
iIndex:integer;
sText:string
end;

procedure TForm1.proTest(var Node1:array of myNode);
var
Node2:array of myNode
begin
setlength(Node2,1) //没问题
setlength(Node1,1) //有问题
end;

...全文
53 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码民工 2003-10-29
  • 打赏
  • 举报
回复
谢谢大家的回答,本人刚学Delphi,请多指教!学习中...
代码民工 2003-10-22
  • 打赏
  • 举报
回复
To:chw_csdn_chw(chw)
你好,你认为怎样才能实现:
通过过程来修改已定义且可能有值的动态数组(P_Node)的数据及大小呢?
Ben76 2003-10-22
  • 打赏
  • 举报
回复
你不是学计算机的吧?
你的参数仅仅是传递数组首地址,根本不是定义动态数组,怎么能用Setlength呢?
真是晕~~
karach 2003-10-22
  • 打赏
  • 举报
回复
晕~~~~~~~
把Node2,Node1改为Node[2],Node[1]
不行吗?不明白
代码民工 2003-10-22
  • 打赏
  • 举报
回复
谢谢!我试试!
chw_csdn_chw 2003-10-22
  • 打赏
  • 举报
回复
我翻遍了手头的资料也没有类似的资料,换句话说就是,没有这样用的。你必须通过过程改动态数组吗?
建议放在procedure外访问。
其实,编程就是try,fail,try again ,fail,then give up 一条路不通,何必一直走下去呢?
(仅代表个人观点),
chw_csdn_chw 2003-10-21
  • 打赏
  • 举报
回复
我想我找到答案了,
因为proTest(var Node1:array of myNode);函数是引用参数传递,参数是传地址的,并不压到函数的堆栈里,因此函数里处理的Nodel都是一个32位的整数,因为high()函数的参数可以是整数,不信你可以试试
j:=0;
i:=high(j);
showmessage(inttostr(i));
但是函数setlength()就不行了,不能以一个整数作为第一个参数。
所以连编译都不通过!

代码民工 2003-10-21
  • 打赏
  • 举报
回复
请帮我看看,搞定就结贴!
代码民工 2003-10-21
  • 打赏
  • 举报
回复
Node1是传地址形参,不需要定义吧?
因其实参(P_Node)是已定义,已有值的动态数组!
我就是想通过此过程修改实参(P_Node)的大小及其值!

type
myNode=record
iIndex:integer;
sText:string
end;

procedure TForm1.proTest(var Node1:array of myNode);
var
Node2:array of myNode;
i:integer;
begin
setlength(Node2,1) //没问题
i:=high(Node1); //没问题
setlength(Node1,1) //有问题 为什么能访问其大小,却不能通过setlength()重设其大小呢?
end;





wzds2000 2003-10-21
  • 打赏
  • 举报
回复
setlength(Node2,1)后面好像没些‘;’!!!
herofy 2003-10-21
  • 打赏
  • 举报
回复
把分给我
herofy 2003-10-21
  • 打赏
  • 举报
回复
你的Node1没有定义,只有Node2定义了,
var
Node2,Node1:array of myNode
代码民工 2003-10-21
  • 打赏
  • 举报
回复
to:nyf1220(我是党员)

不是,我想定义一个传地址(var)的动态数组,在过程中用setlength()改变数组大小.
请再帮我看看,谢谢!

type
myNode=record
iIndex:integer;
sText:string;
end;

procedure TForm1.proTest(var Node1:array of myNode);
var
Node2:array of myNode
begin
setlength(Node2,1); //没问题
setlength(Node1,1); //有问题
end;

//调用前 P_Node已定义为全局动态数组(P_Node:array of myNode)想通过proTest
//改变其大小、内容。
proTest(P_Node)
nyf1220 2003-10-21
  • 打赏
  • 举报
回复
呵呵,不好意思,写错了
定义数组
Node:array[1..2] fo myNode;
nyf1220 2003-10-21
  • 打赏
  • 举报
回复
当然有问题了,你这个node1就没有定义!
是不是这个样?
procedure TForm1.proTest(var Node1:array of myNode);
var
Node2:array[1..2] of myNode
begin
setlength(Node[2],1)
setlength(Node[1],1)
end;


5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧