指向同一数组的指针数组

Jay*_*Dao 5 delphi pascal

我读过这样一段Delphi代码:

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

VAR
  function :ARRAY[1..70] OF psample;
Run Code Online (Sandbox Code Playgroud)

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

所以当我写:

function[1]^[1] := 5;
function[1]^[2] := 10;
Run Code Online (Sandbox Code Playgroud)

然后 :

function[n]^[1] := 5 
function[n]^[2] := 10; ( n = 2 to 70)
Run Code Online (Sandbox Code Playgroud)

那是对的吗 ?

Dav*_*nan 6

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

当然,因为它function是Pascal中的保留字,所以该代码甚至无法编译.我现在假设变量被调用f.

考虑以下定义:

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

var
  f : array [1..70] of psample;
Run Code Online (Sandbox Code Playgroud)

在这里,sample1psample有型.sample1是描述80个整数数组的类型.psample是指向a的指针sample1.

接下来f定义名为变量的变量.这是一个70 psample秒的阵列.

现在,在你甚至可以考虑写作时会发生什么之前f[1]^[1],我们需要为元素分配一些值f.

假设我们这样做:

var
  sample: sample1;
...
for i := 1 to 70 do
  f[i] := @sample;
Run Code Online (Sandbox Code Playgroud)

现在,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];
Run Code Online (Sandbox Code Playgroud)

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