数组作为函数的参数

时间:2013-11-18 21:10:20

标签: arrays pascal freepascal

我有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“

2 个答案:

答案 0 :(得分:1)

您需要声明自己的类型,然后使用该类型作为函数的参数。使用Low单元中的HighSystem函数,而不是传递数组维度;它们将与静态(预先声明的)和动态数组一起使用,并避免硬编码数组大小和迭代器。

你想避免硬编码整数索引,因为Pascal中的静态数组不必以索引0开头;以下是完全合法的Pascal数组声明,其中数组边界从索引-33

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);