2012-02-02 67 views
5

Tôi đã đọc một đoạn mã Delphi như thế này:Một mảng của con trỏ trỏ đến cùng một mảng

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

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

Từ hiểu biết của tôi, các lập trình viên đang cố gắng để khai báo một mảng có chứa 70 con trỏ và mỗi con trỏ trỏ tới một mảng mẫu 1.

Vì vậy, khi tôi viết:

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

thì:

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

Là đúng?

Trả lời

6

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, sample1psample 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ị ij. 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.

+0

cảm ơn David, nó rất hữu ích. –

2

Điều đó là chính xác. Bạn có 70 con trỏ, mỗi con trỏ trỏ tới một mảng gồm 80 số nguyên.

+0

cảm ơn câu trả lời của bạn –

+2

Bạn không trả lời phần thứ hai của câu hỏi. –

Các vấn đề liên quan