Con trỏ có nhiều khái niệm nhưng dễ dàng và chúng rất quan trọng đối với lập trình C. Các khái niệm con trỏ quan trọng sau đây phải rõ ràng đối với bất kỳ lập trình viên C nào
Một
con trỏ trong C là một địa chỉ, là một giá trị số. Do đó, bạn có thể
thực hiện các phép toán số học trên một con trỏ giống như bạn có thể
thực hiện trên một giá trị số. Có bốn toán tử số học có thể được sử dụng
trên con trỏ: ++, --, + và -
Để hiểu con trỏ số học, chúng ta
hãy coi ptr là một con trỏ số nguyên trỏ đến địa chỉ 1000. Giả sử số
nguyên 32 bit, chúng ta hãy thực hiện phép toán số học sau trên con trỏ:
ptr++
Sau
thao tác trên, ptr sẽ trỏ đến vị trí 1004 vì mỗi lần ptr được tăng lên,
nó sẽ trỏ đến vị trí số nguyên tiếp theo cách vị trí hiện tại 4 byte.
Thao tác này sẽ di chuyển con trỏ đến vị trí bộ nhớ tiếp theo mà không
ảnh hưởng đến giá trị thực tại vị trí bộ nhớ đó. Nếu ptr trỏ đến một ký
tự có địa chỉ là 1000, thì thao tác trên sẽ trỏ đến vị trí 1001 vì ký tự
tiếp theo sẽ có sẵn ở 1001.
1. Tăng một con trỏ
Chương trình sau tăng con trỏ
biến để truy cập từng phần tử kế tiếp của mảng:
Kết quả thực thi của chương trình:
Address of nNumbers[0] = dab143c
Value of nNumbers[0] = 10
Address of nNumbers[1] = dab1440
Value of nNumbers[1] = 100
Address of nNumbers[2] = dab1444
Value of nNumbers[2] = 200
2. Giảm con trỏ
Cách tính tương tự được áp dụng cho việc giảm con trỏ, làm giảm giá trị của nó theo số byte của kiểu dữ liệu của con trỏ:
Kết quả thực thi chương trình:
Address of nNumbers[2] = 5899444
Value of nNumbers[2] = 200
Address of nNumbers[1] = 5899440
Value of nNumbers[1] = 100
Address of nNumbers[0] = 589943c
Value of nNumbers[0] = 10
3. So sánh con trỏ
Con trỏ có thể được so sánh bằng cách sử dụng các toán tử quan hệ, chẳng hạn như ==, < và >. Nếu p1 và p2 trỏ đến các biến có liên quan với nhau, chẳng hạn như các phần tử của cùng một mảng, thì p1 và p2 có thể được so sánh với nhau.
incrementing the variable pointer so long as the address to which it points is either less than or equal to the address of the last element of the array, which is &var[MAX - 1]
Chương trình sau tăng con trỏ biến miễn là địa chỉ mà nó trỏ tới nhỏ hơn hoặc bằng địa chỉ của phần tử cuối cùng của mảng, là &var[MAX - 1]
Kết quả thực hiện chương trình:
Address of nNumbers[0] = 577744c
Value of nNumbers[0] = 10
Address of nNumbers[1] = 5777450
Value of nNumbers[1] = 100
Address of nNumbers[2] = 5777454
Value of nNumbers[2] = 200
0 Nhận xét