2015-12-02 25 views
1

我做了有一个数组的程序,它的一个参数Pascal:如何将数组传递给子程序?

program something ; 

const someArray: array[1..4] of integer = (1, 2, 3, 4); 

procedure name(someArray: array; a, n: integer); 
    begin 
    .... 
    end; 

begin 
name(someArray, x, y) 
end. 

编译程序后的程序,我得到一个错误: 致命:语法错误,预期但是,找到(功能名称()为高亮显示)

为什么不能使用此程序?

+0

这个问题在这里已经回答:http://stackoverflow.com/questions/20057974/array-as-an-argument-of-a-function –

+1

开放数组依赖于方言。如果你使用Delphi或类似Lazarus的东西,这个术语是开放数组名(somearray:整型数组; ...); –

+0

为什么要将数组参数命名为与常量数组('someArray')相同的函数?虽然范围可能被理解,但它不必要地引入一些混淆。 – lurker

回答

3

您需要正确声明您的参数,作为开放数组。您可以使用LowHigh找到该阵列的边界。

这里有一个(无用的,但工作)例如:

program Sample; 

const 
    SomeArray: array[1..4] of Integer = (1, 2, 3, 4); 

procedure Name(const AnArray: Array of Integer; const A, B: Integer); 
var 
    OutOne, OutTwo, i: Integer; 
begin 
    for i := Low(AnArray) to High(AnArray) do 
    begin 
    OutOne := AnArray[i] * A; 
    OutTwo := AnArray[i] * B; 
    WriteLn('One: ', OutOne, ' Two: ', OutTwo); 
    end; 
end; 

begin 
    Name(SomeArray, x, y); 
    ReadLn; 
end. 
0

为了补充肯·怀特的回答,在直线上升(预开放数组)帕斯卡,array自身在参数定义是不支持的。

相反,你需要声明一个特定的数组类型来完成你在这里要做的事情。

这里有可能是什么样子:

program something ; 

type 
    TMyArray = array[1..4] of integer; 

const someArray: TMyArray = (1, 2, 3, 4); 

procedure name(someArray: TMyArray; a, n: integer); 
    begin 
    .... 
    end; 

begin 
name(someArray, x, y) 
end.