2012-02-02 30 views
5

He leído un trozo de código de Delphi como esto:una matriz de punteros que apuntan a la misma matriz

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

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

Desde mi entender, el programador está tratando de declarar una matriz que contiene 70 indicadores y cada uno el puntero apunta a una matriz de muestra1.

Así que cuando escribo:

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

a continuación:

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

¿Es eso correcto?

Respuesta

6

Su muestra de código carece de información ya que no dice cómo se define function. Esto significa que no puede sacar las conclusiones que intenta dibujar.

Por supuesto, dado que function es una palabra reservada en Pascal, ese código nunca podría compilarse. Asumiré ahora que la variable se llama f.

considerar las siguientes definiciones:

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

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

Aquí, sample1 y psample son tipos. sample1 es un tipo que describe una matriz de 80 enteros. psample es un puntero a sample1.

A continuación se define una variable llamada f. Es una matriz de 70 psample s.

Ahora, antes de que pueda siquiera considerar lo que sucede cuando escribe f[1]^[1], debemos asignar algunos valores a los elementos de f.

Supongamos que hicimos de esta manera:

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

Ahora bien, sería cierto que f[i]^[k] se refiere a la misma entero como f[j]^[k] para todas válidas y ij. Por lo tanto, cuando escribe f[1]^[1] := 42, también está asignando ese valor a f[2]^[1], f[3]^[1] y así sucesivamente.

Por otra parte usted podría hacerlo de esta manera:

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

Ahora cada f[i] puntero apunta a una matriz distinta en la memoria. En este caso, la asignación de f[1]^[1] := 42 no modifica el valor de f[2]^[1] o cualquiera de los otros valores.

+0

gracias David, es muy útil. –

2

Eso es correcto. Tienes 70 punteros, cada uno apuntando a una matriz de 80 enteros.

+0

gracias por su respuesta –

+2

No respondió la segunda parte de la pregunta. –

Cuestiones relacionadas