我有2个二维数组和一个函数。
我希望该函数将数组作为参数。
我尝试了这样的代码:
var array1:array[1..10,1..10] of integer;
array2:array[1..20,1..10] of integer;
function name(var my_array:array of array of integer, n:integer);
function name(var my_array:array[1..n,1..10] of integer;const n:integer);
但是在尝试编译代码时遇到了错误。有什么提示吗?
如果您希望我为每个版本粘贴错误代码,请在请求中留下评论。
对于
function name(var my_array:array of array of integer, n:integer);
错误代码为:“arg no。:Got的不兼容类型”SmallInt的数组[0..10]的数组[0..10]“,每次调用该函数时都会出现”Open array od SmallInt“
答案 0 :(得分:1)
您需要声明自己的类型,然后使用该类型作为函数的参数。使用Low
单元中的High
和System
函数,而不是传递数组维度;它们将与静态(预先声明的)和动态数组一起使用,并避免硬编码数组大小和迭代器。
你想避免硬编码整数索引,因为Pascal中的静态数组不必以索引0
开头;以下是完全合法的Pascal数组声明,其中数组边界从索引-3
到3
:
var
Arr: array[-3..3] of Integer;
这是一个使用动态数组(array of array of Integer
)的示例,它循环遍历二维数组并对值进行求和;它初始化一个5 x 5数组,用数据填充它,然后调用SumTwoDimIntArray
函数来对值进行求和。
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TTwoDimIntArray = array of array of Integer;
function SumTwoDimIntArray(Arr: TTwoDimIntArray): Integer;
var
i, j: Integer;
begin
Result := 0;
for i := Low(Arr) to High(Arr) do
for j := Low(Arr[i]) to High(Arr[i]) do
Result := Result + Arr[i][j];
end;
var
MyArr: TTwoDimIntArray;
i, j: Integer;
begin
SetLength(MyArr, 5);
for i := Low(MyArr) to High(MyArr) do
begin
SetLength(MyArr[i], 5);
for j := Low(MyArr[i]) to High(MyArr[i]) do
MyArr[i][j] := j + 1;
end;
WriteLn(Format('Sum is %d', [SumTwoDimIntArray(MyArr)]));
ReadLn;
end.
答案 1 :(得分:1)
在这些情况下,您应该使用新类型。如下:
Type
vector = array [1..20,1..20] of integer;
var array1:vector;
array2:vector;
function name(var my_array:vector, n:integer);
function name(var my_array:vector;const n:integer);