2012-02-02 8 views
5

同じ配列を指すポインタの配列:私の理解からは、私はこのような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) 

は正しいですか?

答えて

6

functionが定義されていないため、コードサンプルには情報がありません。これは、描画しようとする結論を引き出すことができないことを意味します。

もちろん、functionはパスカルの予約語なので、そのコードは決してコンパイルできません。変数がfとなったと仮定します。

は、以下の定義を考えてみましょう:

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

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

sample1psampleがタイプです。 sample1は、80個の整数の配列を記述する型です。 psamplesample1へのポインタです。

次に、fという名前の変数が定義されています。それは70 psampleの配列です。

f[1]^[1]と書くときに何が起こるかを検討する前に、fの要素にいくつかの値を割り当てる必要があります。

は、我々はこのようにそれをしなかったと仮定します。

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

今ではf[i]^[k]は、すべての有効なiためf[j]^[k]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]の値やその他の値は変更されません。

+0

Davidに感謝します。とても役に立ちます。 –

2

これは間違いありません。 70個のポインタがあり、それぞれが80個の整数の配列を指しています。

+0

あなたの答えはありがたいです –

+2

あなたは質問の第2部分に答えませんでした。 –

関連する問題