指向同一数组的指针数组

时间:2012-02-02 21:01:51

标签: delphi pascal

我已经阅读了一段这样的Delphi代码:

sample1  = ARRAY[1..80] OF INTEGER; 
psample =^sample1;

VAR
  function :ARRAY[1..70] OF psample;

根据我的理解,程序员试图声明一个包含70个指针的数组,每个指针指向一个sample1数组。

所以当我写:

function[1]^[1] := 5;
function[1]^[2] := 10;

然后:

function[n]^[1] := 5 
function[n]^[2] := 10; ( n = 2 to 70)

这是对的吗?

2 个答案:

答案 0 :(得分:6)

您的代码示例缺少一些信息,因为您没有说明function是如何定义的。这意味着您无法得出您试图绘制的结论。

当然,由于function是Pascal中的保留字,因此该代码甚至无法编译。我现在假设该变量被称为f

考虑以下定义:

type
  sample1 = array [1..80] of integer; 
  psample = ^sample1;

var
  f : array [1..70] of psample;

此处,sample1psample是类型。 sample1是描述80个整数数组的类型。 psample是指向sample1的指针。

接下来定义名为f的变量。它是一个70 psample s的数组。

现在,在您考虑写f[1]^[1]时会发生什么之前,我们需要为f的元素分配一些值。

假设我们这样做:

var
  sample: sample1;
...
for i := 1 to 70 do
  f[i] := @sample;

现在,对于所有有效的f[i]^[k]f[j]^[k]i引用与j相同的整数。因此,当您撰写f[1]^[1] := 42时,您还要将该值分配给f[2]^[1]f[3]^[1]等等。

另一方面,你可以这样做:

var
  samples: array [1..70] of sample1;
...
for i := 1 to 70 do
  f[i] := @samples[i];

现在每个f[i]指针指向内存中的不同数组。在这种情况下,分配f[1]^[1] := 42不会修改f[2]^[1]或任何其他值的值。

答案 1 :(得分:2)

这是正确的。你有70个指针,每个指针指向一个包含80个整数的数组。

相关问题