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;
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;
解决方案 »
- 用DELPHI代码如何设置打印机的纸张大小?
- 请问:我怎么才能按字节从文件中取出每个字节中所对应的字符?文件中还有Unicode字符,我要如何读取呢?
- DELPHI2005中没有MTS数据模块了,我该用什么替代?DBEXPRESS是否支持SYBASE 11。9。2?
- 怎样判断一个时间变量是不是空值!高手帮忙
- cxgrid问题,请指教!
- 刚才写错拉 在看看
- 新手花200分求答案,希望高手帮忙看看
- 如何在DBGrid中增加一列显示排序序号?
- 老兄,帮帮忙,在主FORM上怎样判断另一个FORM(启动时未加载)是否存在?很急,谢谢!
- 多个文件打包成一个文件,遇到文件夹怎么办?
- 谁有DELPHI实务金典 6.0的光盘
- 新人问题,送分!!!在线等!!!
是不是这个样?
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;
定义数组
Node:array[1..2] fo myNode;
请再帮我看看,谢谢!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)
var
Node2,Node1:array of myNode
因其实参(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;
因为proTest(var Node1:array of myNode);函数是引用参数传递,参数是传地址的,并不压到函数的堆栈里,因此函数里处理的Nodel都是一个32位的整数,因为high()函数的参数可以是整数,不信你可以试试
j:=0;
i:=high(j);
showmessage(inttostr(i));
但是函数setlength()就不行了,不能以一个整数作为第一个参数。
所以连编译都不通过!
你好,你认为怎样才能实现:
通过过程来修改已定义且可能有值的动态数组(P_Node)的数据及大小呢?
建议放在procedure外访问。
其实,编程就是try,fail,try again ,fail,then give up 一条路不通,何必一直走下去呢?
(仅代表个人观点),
把Node2,Node1改为Node[2],Node[1]
不行吗?不明白
你的参数仅仅是传递数组首地址,根本不是定义动态数组,怎么能用Setlength呢?
真是晕~~