delphi 7 中数组如何当参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 7 中数组如何当参数相关的知识,希望对你有一定的参考价值。
uses SysUtils;
var a,k,t,i,j:longint;var s:array[1..8] of longint;type tdigits=array[1..8] of longint;function findt(F:tdigits; a, n:longint):boolean;var i:longint; begin
for i:=1 to n do begin if(f[i]=a) then begin findt:=false; break; end;
end; if (i=n) then findt:=true;
end;beginrandomize;k:=1; j:=1; for i:=1 to 8 do begin a:=random(8)+1; K:=k+1; if (k<=2) then begin s[i]:=a; t:=a; end else begin for j:=1 to i-1 do begin if s[j]= a then begin repeat a:=random(8)+1; until(findt(s,a,8)=false); if(findt(s,a,8)=false) then s[i]:=a; end else begin
end; end; if(j=i) then s[i]:=a; end; end; for i:=1 to 8 do write(s[i],' '); readln;end.
为何编译不能通过,而在free pascal 则可以,如何改写?
因为你在函数中传递的数组的形参的类型的是tdigits。但是实参s却不是tdigits而是array[1..8] of longint。固然实参的声明与形参就形式上来说是一致的(都是array[1..8] of longint)。但是在程序中tdigits与实参s的类型却不能被认定为同种类型。所以自然无法通过编译。解决的方法事实上非常简单,只需要将实参s的类型修改为tdigits即可。整理后的代码如下:
usesSysUtils;
type
tdigits = array [1 .. 8] of longint;
var
a, k, t, i, j: longint; s: tdigits;
function findt(F: tdigits; a, n: longint): boolean;
var
i: longint;
begin
for i := 1 to n do
begin
if (F[i] = a) then
begin
findt := false;
break;
end;
end;
if (i = n) then
findt := true;
end;
begin
randomize;
k := 1;
j := 1;
for i := 1 to 8 do
begin
a := random(8) + 1;
k := k + 1;
if (k <= 2) then
begin
s[i] := a;
t := a;
end
else
begin
for j := 1 to i - 1 do
begin
if s[j] = a then
begin
repeat
a := random(8) + 1;
until (findt(s, a, 8) = false);
if (findt(s, a, 8) = false) then
s[i] := a;
end
else
begin
end;
end;
if (j = i) then
s[i] := a;
end;
end;
for i := 1 to 8 do
write(s[i], ' ');
readln;
end. 参考技术A 可以设置你的数组为一个枚举型, Type TArr = Array[0..3] of char;
procedure Test(Arr:TArr);
或者用动指针 参考技术B 在函数中如果数组的个数不定,可以使用开放数组参数
实参可以接受静态数组和动态数组
procedure p1(a:array of Byte);
begin
ShowMessage( IntToHex( Integer(@a),2));
ShowMessage(IntToStr(a[0]));
end;
procedure TForm1.btn1Click(Sender: TObject);
var
a:array[0..5] of Byte;
begin
ShowMessage(IntToHex( Integer(@a),2));
p1(a);
end;
function Find(A: array of Char): Integer;
以上函数使用字符数组作为参数传值,其中A:array of Char虽然有着与动态数组
dynamic array相近的形式,但是在这里它并不代表着动态数组。这里A:array of Char
可以使用任意静态或动态数组。
另外,如果一定使A:array of Char为动态数组,则须使用以下形式:
type TDynamicCharArray = array of Char;
function Find(A: TDynamicCharArray): Integer;
例子(e.g.)
function Find(A: array of Char): Integer;
begin
setlength(A,100);//出错,应为setlength只能用于动态数组。
end;
function Find(A: TDynamicCharArray): Integer;
begin
setlength(A, 100);//正确。
end;
delphi 数组作为参数传递
在函数中如果数组的个数不定,可以使用开放数组参数
实参可以接受静态数组和动态数组
procedure
p1(a:
array
of
Byte
);
begin
ShowMessage( IntToHex(
Integer
(@a),
2
));
ShowMessage(IntToStr(a[
0
]));
end
;
procedure
TForm1
.
btn1Click(Sender: TObject);
var
a:
array
[
0..5
]
of
Byte
;
begin
ShowMessage(IntToHex(
Integer
(@a),
2
));
p1(a);
end
;
function Find(A: array of Char): Integer;
以上函数使用字符数组作为参数传值,其中A:array of Char虽然有着与动态数组
dynamic array相近的形式,但是在这里它并不代表着动态数组。这里A:array of Char
可以使用任意静态或动态数组。
另外,如果一定使A:array of Char为动态数组,则须使用以下形式:
type TDynamicCharArray = array of Char;
function Find(A: TDynamicCharArray): Integer;
======================
例子(e.g.)
function Find(A: array of Char): Integer;
begin
setlength(A,100);//出错,应为setlength只能用于动态数组。
end;
function Find(A: TDynamicCharArray): Integer;
begin
setlength(A, 100);//正确。
end;
参考http://www.cnblogs.com/bayzhang/p/6098468.html
以上是关于delphi 7 中数组如何当参数的主要内容,如果未能解决你的问题,请参考以下文章
你好,请教一个问题,delphi如何调用DLL中的一个带动态数组参数的方法?