请问:delphi 中数组作为函数的参数传递,这样传过去的是地址,怎样把数组作为值传递过去?
intarray=array[1..3]ofinteger;functionTForm1.upadd(constna:intarray):Integer;varnb:in...
intarray = array[1..3] of integer;
function TForm1.upadd(const na:intarray): Integer;
var
nb:intarray;
begin
nb:=na;
nb[1]:=30;
nb[2]:=30;
nb[3]:=30;
upadd:=na[3];
end; 展开
function TForm1.upadd(const na:intarray): Integer;
var
nb:intarray;
begin
nb:=na;
nb[1]:=30;
nb[2]:=30;
nb[3]:=30;
upadd:=na[3];
end; 展开
5个回答
展开全部
//以传值方式传递数组参数的方法
function Fn1(Arr:array of Integer):Integer; //返回数组长度
var
iCyc:Integer;
begin
Result := 0;
for iCyc := Low(Arr) to High(Arr) do //计算数组长度
Inc(Result);
if Result > 0 then
Arr[Low(Arr)]:= 4; //改变数组中第一个元素的值,
//如果要禁止在函数过程中出现赋值行为,把函数声明成
// function Fn1(const Arr:array of Integer):Integer;
//这样,将不能对传进来的Arr数组进行赋值操作。
end;
//调用方法:
var
Arr: array [0..25] of Integer; //定义26个长度的数组
begin
Arr[0] :=2; //赋值
ShowMessage(IntToStr(Fn1( Arr)) + ';'+ IntToStr( Arr[0]));//A[0]的值没有被改变
end;
//使用自定义类型时:
type
IntArray = array[1..3] of Integer;
//调用方法:
var
Arr: IntArray;
begin
Arr[1] := 2;
ShowMessage(IntToStr(Fn1(Arr)) + ';'+ IntToStr(Arr[1]));
end;
function Fn1(Arr:array of Integer):Integer; //返回数组长度
var
iCyc:Integer;
begin
Result := 0;
for iCyc := Low(Arr) to High(Arr) do //计算数组长度
Inc(Result);
if Result > 0 then
Arr[Low(Arr)]:= 4; //改变数组中第一个元素的值,
//如果要禁止在函数过程中出现赋值行为,把函数声明成
// function Fn1(const Arr:array of Integer):Integer;
//这样,将不能对传进来的Arr数组进行赋值操作。
end;
//调用方法:
var
Arr: array [0..25] of Integer; //定义26个长度的数组
begin
Arr[0] :=2; //赋值
ShowMessage(IntToStr(Fn1( Arr)) + ';'+ IntToStr( Arr[0]));//A[0]的值没有被改变
end;
//使用自定义类型时:
type
IntArray = array[1..3] of Integer;
//调用方法:
var
Arr: IntArray;
begin
Arr[1] := 2;
ShowMessage(IntToStr(Fn1(Arr)) + ';'+ IntToStr(Arr[1]));
end;
推荐于2018-04-08 · 知道合伙人软件行家
关注
展开全部
在 delphi 中,参数的传递可分为值传递、var地址传递,以及 out(输出)、const(常数)。
前两者的区别,功能上的区别在于:
值传递过程中,对于参数的修改不影响源。
引用传递过程中,对于参数的修改,会直接修改源本身。
如果是以引用方式(即传递地址方式),前面需要添加关键字 var。
如:
function TForm1.upadd(var na:intarray): Integer;
问题描述中的代码,实现的就是值传递而非地址传递方式。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这个是静态数组,本身就是值传递的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
type
pIntArr = ^intarray;
intarray = array[1..3] of integer;
function TForm1.upadd(const na:intarray): Integer;
var
nb: pIntArr;
begin
new(nb);
nb^ := na;
nb[1]:=30;
nb[2]:=30;
nb[3]:=30;
upadd:=na[3];
dispose(nb);
end;
pIntArr = ^intarray;
intarray = array[1..3] of integer;
function TForm1.upadd(const na:intarray): Integer;
var
nb: pIntArr;
begin
new(nb);
nb^ := na;
nb[1]:=30;
nb[2]:=30;
nb[3]:=30;
upadd:=na[3];
dispose(nb);
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我测试发现,只要在函数定义中不使用var,这个数组就是值传递啊,函数内部修改了也无效!!!亲测
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询