将带有整数值和字符索引的数组传递给Pascal中的函数

将带有整数值和字符索引的数组传递给Pascal中的函数,pascal,Pascal,我真的很想看看它是如何完成的,编译器一直假设我有整数索引并返回错误 如何传递以下数组: countc: Array['a'..'z'] of Integer; 对于函数?在传统的Pascal中,在将类似数组的内容传递给函数之前,必须声明数组是其实例的类型,如下所示 type TSimpleArray = Array['A'..'Z', '0'..'9'] of integer; var ASimpleArray : TSimpleArray; 换句话说,您不能在函数/过程的定义中指定

我真的很想看看它是如何完成的,编译器一直假设我有整数索引并返回错误

如何传递以下数组:

countc: Array['a'..'z'] of Integer;

对于函数?

在传统的Pascal中,在将类似数组的内容传递给函数之前,必须声明数组是其实例的类型,如下所示

type
  TSimpleArray = Array['A'..'Z', '0'..'9'] of integer;
var
  ASimpleArray : TSimpleArray;
换句话说,您不能在函数/过程的定义中指定数组的边界

一旦像上面那样定义了数组类型,就可以声明一个具有定义类型的参数的函数(或过程),如下所示:

function ArrayFunction(SimpleArray : TSimpleArray) : Integer;
var
  C1,
  C2 : Char;
begin
  ArrayFunction := 0;
  for C1 := 'A' to 'Z' do
    for C2 := '0' to '9' do
      ArrayFunction := ArrayFunction + SimpleArray[C1, C2];
end;
这显然是数组内容的总和

更现代的PASCAL(如Delphi和FPC的ObjectPascal)也支持声明数组类型参数的其他方式,但它们必须是基于零的(这就排除了使用字符索引)。Delphi和FPC还支持使用'Result'作为函数名的别名,如中所示

function ArrayFunction(SimpleArray : TSimpleArray) : Integer;
[...]
begin
  Result := 0;

如果重命名一个函数或复制/粘贴它来定义另一个函数,这将节省时间和精力。

在传统的Pascal中,在将类似数组的内容传递给函数之前,必须声明数组是其实例的类型,如下所示

type
  TSimpleArray = Array['A'..'Z', '0'..'9'] of integer;
var
  ASimpleArray : TSimpleArray;
换句话说,您不能在函数/过程的定义中指定数组的边界

一旦像上面那样定义了数组类型,就可以声明一个具有定义类型的参数的函数(或过程),如下所示:

function ArrayFunction(SimpleArray : TSimpleArray) : Integer;
var
  C1,
  C2 : Char;
begin
  ArrayFunction := 0;
  for C1 := 'A' to 'Z' do
    for C2 := '0' to '9' do
      ArrayFunction := ArrayFunction + SimpleArray[C1, C2];
end;
这显然是数组内容的总和

更现代的PASCAL(如Delphi和FPC的ObjectPascal)也支持声明数组类型参数的其他方式,但它们必须是基于零的(这就排除了使用字符索引)。Delphi和FPC还支持使用'Result'作为函数名的别名,如中所示

function ArrayFunction(SimpleArray : TSimpleArray) : Integer;
[...]
begin
  Result := 0;

如果重命名一个函数或复制/粘贴它以定义另一个函数,则可以节省时间和精力。

声明一个
类型TMyArray=array['a'..'z']的整数并传递该类型的变量。我认为这可能是您使用的Pascal编译器的问题。在正确实现的Pascal编译器中,这当然不应该是问题并传递该类型的变量。我认为这可能是您使用的Pascal编译器的问题。在正确实现的Pascal编译器中,这当然不应该是一个问题。这回答了你的问题吗?如果没有,请解释原因。这是否回答了您的问题?如果没有,请解释原因。