gpt4 book ai didi

Pascal 过程传递变量数组

转载 作者:行者123 更新时间:2023-12-01 13:42:54 24 4
gpt4 key购买 nike

当我尝试将变量数组从过程传递到主程序时,a[1]在程序中应该等于 arr[1]在主程序中,像这样:
a[1] = arr[1]a[2] = arr[2]a[3] = arr[3]a[4] = arr[4]a[5] = arr[5]
但该程序实际上是这样的:
a[1] = ''a[2] = arr[1]a[3] = arr[2]a[4] = arr[3]a[5] = arr[4]
我不知道代码有什么问题,有人可以指出错误吗?

简化的代码,同样的问题:

var
arr : array[1..5] of string;
i : integer;

procedure test(var a : array of string);
var
i : integer;
begin
a[1] := 'one';
a[2] := 'two';
a[3] := 'three';
a[4] := 'four';
a[5] := 'five';
for i := 1 to 5 do writeln(a[i]);
end;

begin
test(arr);
write('-----');
for i := 1 to 5 do
begin
writeln(arr[i]);
if arr[i] = '' then writeln('NOTHING');
end;
readln
end.

最佳答案

MartynA 提示您查看在线帮助中的“开放数组参数”。但是没有必要按照他的建议去做,使用ArrayLoBound等等。实际数组的声明可以有任何索引范围。

我会这样做:

program OpenArrayTest;

{$APPTYPE CONSOLE}

var
{ Initialization like this only possible for global variables. }
Arr: array[11..15] of string = ('once', 'doce', 'trece', 'catorce', 'quince');
I: Integer;

procedure ModifyArray(var A: array of string);
var
I: Integer;
begin
for I := Low(A) to High(A) do
A[I] := A[I] + ' <-- ' + IntToStr(I);
end;

procedure ShowArray(const A: array of string);
begin
for I := Low(A) to High(A) do
Writeln(A[I]);
end;

begin
ModifyArray(Arr);
ShowArray(Arr);
Writeln('-----');
ShowArray(['one', 'two', 'three', 'four', 'five', 'six', 'seven']);
Readln;
end.

输出是:
once <-- 0
doce <-- 1
trece <-- 2
catorce <-- 3
quince <-- 4
-----
one
two
three
four
five
six
seven

换句话说,使用 High()Low()访问参数中的项目。不要使用任何固定边界,因为数组可以有任何长度。另请注意,您可以使用 Length(A) 获取数组中的项目数。或 Length(Arr) .您不仅可以传递静态数组,例如 Arr ,您也可以传递动态数组,或使用开放数组构造函数(使用 [] ),就像我在第二次调用 ShowArray() 时所做的那样.

在我的文章 "Open arrays and array of const" 中详细了解开放数组.

关于Pascal 过程传递变量数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38438173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com