Các thủtục và hàm tác động trên con trỏ

Một phần của tài liệu Ngôn ngữ lập trình Pascal ĐH Hoa Lư (Trang 118)

1. Con trỏ và biến động

1.4. Các thủtục và hàm tác động trên con trỏ

Giả sử p là một biến con trỏ đã được định nghĩa, để đảm bảo rằng p chưa trỏ đến bất kỳ một đối tượng nào, nghĩa là p là một con trỏ rỗng chúng ta phải gán cho p giá trị NIL

p:= Nil;

b, Gán địa chỉ của một đối tượng cho con trỏ

Giả sử p là một con trỏ và x là một đối tượng (biến, hàm, thủ tục), có ba cách gán địa chỉ của đối tượng x cho con trỏ p:

+ p:= @x;

Trong phép gán trên toán tử @ tác động trên đối tượng x sẽ gán vào con trỏ p địa chỉ kiểu Pointer của đối tượng đó.

+ p:= Addr(x);

Hàm Addr() cho địa chỉ của đối tượng x, địa chỉ này thuộc kiểu Pointer + p:= Ptr(segment,offset) ;

Hàm Ptr trong phép gán trên đòi hỏi các tham số segment và offset phải là giá trị kiểu

Word viết trong hệ 16, ví dụ:

c, Phép gán giữa hai con trỏ

Hai con trỏ tương thích (cùng kiểu) có thể gán giá trị cho nhau, khi đó chúng cùng trỏ tới một địa chỉ.

Ví dụ: Var

p: ^Float; p1: ^Byte; p2: Pointer; x: string; Khi đó các phép gán:

P2:=@x;

P1:= p2; là hợp lệ vì p1 và p2 là tương thích, chúng cùng trỏ đến địa chỉ của biến x. Còn phép gán p:= p1; là không hợp lệ vì hai con trỏ không tương thích.

d, Phép so sánh hai con trỏ

Chỉ tồn tại phép so sánh = (bằng nhau) và <> (khác nhau) giữa hai con trỏ nếu chúng tương thích. Kết quả so sánh là một giá trị Boolean nghĩa là True hoặc False. Hai con trỏ tương thích gọi là bằng nhau nếu chúng cùng trỏ tới một đối tượng, ngược lại gọi là khác nhau.

Chú ý:

* Địa chỉ của một đối tượng có thể gán cho bất kỳ con trỏ nào.

* Với con trỏ không định kiểu (Pointer) chúng ta không thể coi chúng là tương đương với các biến định kiểu thông thường, điều này có nghĩa là không thể sử dụng các thủ tục Write, Read hoặc phép gán cho biến p^ nếu p là Pointer.

Một phần của tài liệu Ngôn ngữ lập trình Pascal ĐH Hoa Lư (Trang 118)

Tải bản đầy đủ (DOC)

(141 trang)
w