指向同一个数组

问题描述:

我读过一段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) 

是正确的吗?

您的代码示例缺少一些信息,因为您没有说明如何定义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]对所有有效ij。因此,当您编写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]或任何其他值的值。

+0

感谢大卫,这非常有帮助。 – 2012-02-02 21:43:50

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

+0

感谢您的回答 – 2012-02-02 21:10:22

+2

您没有回答问题的第二部分。 – 2012-02-02 21:17:39