Mẫu mã của bạn thiếu một số thông tin vì bạn không nói cách function
được xác định. Điều này có nghĩa là bạn không thể rút ra kết luận mà bạn cố gắng vẽ.
Tất nhiên, vì function
là một từ dành riêng trong Pascal, mã đó thậm chí không bao giờ biên dịch được. Tôi sẽ giả định rằng biến được gọi là f
.
Hãy xem xét các định nghĩa sau đây:
type
sample1 = array [1..80] of integer;
psample = ^sample1;
var
f : array [1..70] of psample;
Ở đây, sample1
và psample
nhiều loại. sample1
là loại mô tả một mảng gồm 80 số nguyên. psample
là con trỏ đến số sample1
.
Tiếp theo một biến có tên là f
được xác định. Nó là một mảng 70 psample
s.
Bây giờ, trước khi bạn thậm chí có thể xem xét điều gì sẽ xảy ra khi bạn viết f[1]^[1]
, chúng tôi cần chỉ định một số giá trị cho các thành phần của f
.
Giả sử chúng ta đã làm điều đó như thế này:
var
sample: sample1;
...
for i := 1 to 70 do
f[i] := @sample;
Bây giờ nó sẽ là sự thật rằng f[i]^[k]
đề cập đến số nguyên giống như f[j]^[k]
cho tất cả các giá trị i
và j
. Vì vậy, khi bạn viết f[1]^[1] := 42
, bạn cũng chỉ định giá trị đó cho f[2]^[1]
, f[3]^[1]
và cứ tiếp tục như vậy.
Mặt khác bạn có thể làm điều đó như thế này:
var
samples: array [1..70] of sample1;
...
for i := 1 to 70 do
f[i] := @samples[i];
Bây giờ mỗi f[i]
điểm con trỏ đến một mảng riêng biệt trong bộ nhớ. Trong trường hợp này, gán f[1]^[1] := 42
không sửa đổi giá trị f[2]^[1]
hoặc bất kỳ giá trị nào khác.
Nguồn
2012-02-02 21:14:56
cảm ơn David, nó rất hữu ích. –