Pascal - Con trỏ
Con trỏ trong Pascal rất dễ học và thú vị. Một số tác vụ lập trình Pascal được thực hiện dễ dàng hơn với con trỏ, và các tác vụ khác, chẳng hạn như cấp phát bộ nhớ động, không thể thực hiện nếu không sử dụng con trỏ. Vì vậy việc học con trỏ để trở thành một lập trình viên Pascal hoàn hảo trở nên cần thiết. Hãy bắt đầu học chúng theo các bước đơn giản và dễ dàng.
Như bạn đã biết, mọi biến là một vị trí bộ nhớ và mọi vị trí bộ nhớ đều có địa chỉ của nó được xác định có thể được truy cập bằng cách sử dụng tên của biến con trỏ, biểu thị một địa chỉ trong bộ nhớ.
Con trỏ là gì?
Con trỏ là một biến động, có giá trị là địa chỉ của một biến khác, tức là địa chỉ trực tiếp của vị trí bộ nhớ. Giống như bất kỳ biến hoặc hằng số nào, bạn phải khai báo một con trỏ trước khi có thể sử dụng nó để lưu trữ bất kỳ địa chỉ biến nào. Dạng chung của khai báo biến con trỏ là:
type
ptr-identifier = ^base-variable-type;
Kiểu con trỏ được xác định bằng cách thêm tiền tố mũi tên lên của biểu tượng dấu mũ (^) với kiểu cơ sở. Kiểu cơ sở xác định kiểu của các mục dữ liệu. Khi một biến con trỏ được xác định là thuộc kiểu nhất định, nó chỉ có thể trỏ các mục dữ liệu thuộc kiểu đó. Khi một loại con trỏ đã được xác định, chúng ta có thể sử dụngvar khai báo để khai báo biến con trỏ.
var
p1, p2, ... : ptr-identifier;
Sau đây là một số khai báo con trỏ hợp lệ:
type
Rptr = ^real;
Cptr = ^char;
Bptr = ^ Boolean;
Aptr = ^array[1..5] of real;
date-ptr = ^ date;
Date = record
Day: 1..31;
Month: 1..12;
Year: 1900..3000;
End;
var
a, b : Rptr;
d: date-ptr;
Các biến con trỏ được tham chiếu bằng cách sử dụng cùng một ký hiệu dấu mũ (^). Ví dụ, biến liên quan được tham chiếu bởi một con trỏ rptr , là rptr ^ . Nó có thể được truy cập như -
rptr^ := 234.56;
Ví dụ sau sẽ minh họa khái niệm này:
program exPointers;
var
number: integer;
iptr: ^integer;
begin
number := 100;
writeln('Number is: ', number);
iptr := @number;
writeln('iptr points to a value: ', iptr^);
iptr^ := 200;
writeln('Number is: ', number);
writeln('iptr points to a value: ', iptr^);
end.
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
Number is: 100
iptr points to a value: 100
Number is: 200
iptr points to a value: 200
In địa chỉ bộ nhớ trong Pascal
Trong Pascal, chúng ta có thể gán địa chỉ của một biến cho một biến con trỏ bằng cách sử dụng toán tử địa chỉ (@). Chúng tôi sử dụng con trỏ này để thao tác và truy cập mục dữ liệu. Tuy nhiên, nếu vì lý do nào đó, chúng ta cần làm việc với chính địa chỉ bộ nhớ, chúng ta cần lưu trữ nó trong một biến kiểu từ.
Hãy để chúng tôi mở rộng ví dụ trên để in địa chỉ bộ nhớ được lưu trong con trỏ iptr -
program exPointers;
var
number: integer;
iptr: ^integer;
y: ^word;
begin
number := 100;
writeln('Number is: ', number);
iptr := @number;
writeln('iptr points to a value: ', iptr^);
iptr^ := 200;
writeln('Number is: ', number);
writeln('iptr points to a value: ', iptr^);
y := addr(iptr);
writeln(y^);
end.
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
Number is: 100
iptr points to a value: 100
Number is: 200
iptr points to a value: 200
45504
Con trỏ NIL
Luôn luôn là một thực tiễn tốt để chỉ định một NILgiá trị cho một biến con trỏ trong trường hợp bạn không có địa chỉ chính xác để được chỉ định. Điều này được thực hiện tại thời điểm khai báo biến. Một con trỏ được chỉ địnhNILchỉ vào hư không. Hãy xem xét chương trình sau:
program exPointers;
var
number: integer;
iptr: ^integer;
y: ^word;
begin
iptr := nil;
y := addr(iptr);
writeln('the vaule of iptr is ', y^);
end.
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
The value of ptr is 0
Để kiểm tra một nil con trỏ bạn có thể sử dụng câu lệnh if như sau:
if(ptr <> nill )then (* succeeds if p is not null *)
if(ptr = nill)then (* succeeds if p is null *)
Chi tiết con trỏ Pascal
Con trỏ có nhiều khái niệm nhưng dễ và chúng rất quan trọng đối với lập trình Pascal. Có một số khái niệm con trỏ quan trọng sau đây mà một lập trình viên Pascal cần phải hiểu rõ:
Sr.No | Khái niệm & Mô tả |
---|---|
1 | Pascal - Số học con trỏ Có bốn toán tử số học có thể được sử dụng trên con trỏ: tăng, giảm, +, - |
2 | Pascal - Mảng con trỏ Bạn có thể xác định mảng để chứa một số con trỏ. |
3 | Pascal - Con trỏ tới con trỏ Pascal cho phép bạn có con trỏ trên một con trỏ, v.v. |
4 | Truyền con trỏ đến chương trình con trong Pascal Truyền một đối số theo tham chiếu hoặc theo địa chỉ đều cho phép thay đổi đối số đã truyền trong chương trình con đang gọi bởi chương trình con được gọi. |
5 | Con trỏ trả về từ chương trình con trong Pascal Pascal cho phép một chương trình con trả về một con trỏ. |