2015-12-02 27 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.