Con trỏ là một biến lưu trữ địa chỉ của một biến khác.
Tính năng
Các tính năng của con trỏ được giải thích bên dưới -
- Con trỏ tiết kiệm dung lượng bộ nhớ.
- Thời gian thực thi của con trỏ nhanh hơn do truy cập trực tiếp vào vị trí bộ nhớ.
- Với sự trợ giúp của con trỏ, bộ nhớ được truy cập hiệu quả, tức là bộ nhớ được cấp phát và phân bổ động.
- Con trỏ được sử dụng với cấu trúc dữ liệu.
Khai báo, khởi tạo và truy cập con trỏ
Hãy xem xét tuyên bố sau -
int qty = 179;
Trong bộ nhớ, biến có thể được biểu diễn như sau -
Khai báo một con trỏ
Nó có nghĩa là ‘p’ là một biến con trỏ giữ địa chỉ của một biến số nguyên khác, như được đề cập trong câu lệnh bên dưới -
Int *p;
Khởi tạo con trỏ
Toán tử địa chỉ (&) được sử dụng để khởi tạo một biến con trỏ.
Ví dụ -
int qty = 175; int *p; p= &qty;
Truy cập một biến thông qua con trỏ của nó
Để truy cập giá trị của một biến, toán tử hướng (*) được sử dụng.
Ví dụ -
Ở đây, ‘*’ có thể được coi là giá trị tại địa chỉ.
Hai câu lệnh tương đương nhau bởi câu lệnh sau -
p = &qty; n = *p; n =qty
Con trỏ và mảng một chiều
- Trình biên dịch phân bổ các vị trí bộ nhớ liên tục cho tất cả các phần tử của mảng.
- Địa chỉ cơ sở =địa chỉ phần tử đầu tiên (chỉ số 0) của mảng.
- Ví dụ - int a [5] ={10, 20,30,40,50};
Các phần tử
Năm yếu tố được lưu trữ như sau -
-
Nếu ‘p’ được khai báo là con trỏ số nguyên, thì một mảng ‘a’ có thể được trỏ bởi phép gán sau -
p = a; (or) p = &a[0];
-
Mọi giá trị của 'a' đều được truy cập bằng cách sử dụng p ++ để di chuyển từ phần tử này sang phần tử khác. Khi một con trỏ được tăng lên, giá trị của nó được tăng lên theo kích thước của kiểu dữ liệu mà nó trỏ tới. Độ dài này được gọi là "hệ số tỷ lệ".
-
Mối quan hệ giữa 'p' và 'a' được giải thích bên dưới -
P = &a[0] = 1000 P+1 = &a[1] = 1004 P+2 = &a[2] = 1008 P+3 = &a[3] = 1012 P+4 = &a[4] = 1016
-
Địa chỉ của một phần tử được tính bằng cách sử dụng chỉ số của nó và hệ số tỷ lệ của kiểu dữ liệu. Dưới đây là một ví dụ để giải thích điều này.
Address of a[3] = base address + (3* scale factor of int) = 1000 + (3*4) = 1000 +12 = 1012
-
Con trỏ có thể được sử dụng để truy cập các phần tử của mảng thay vì sử dụng lập chỉ mục mảng.
-
* (p + 3) cho giá trị của một [3].
a[i] = *(p+i)
Chương trình mẫu
Sau đây là chương trình C cho con trỏ và mảng một chiều -
#include<stdio.h> main ( ){ int a[5]; int *p,i; printf ("Enter 5 lements"); for (i=0; i<5; i++) scanf ("%d", &a[i]); p = &a[0]; printf ("Elements of the array are"); for (i=0; i<5; i++) printf("%d", *(p+i)); }
Đầu ra
Khi chương trình trên được thực thi, nó tạo ra kết quả sau -
Enter 5 elements : 10 20 30 40 50 Elements of the array are : 10 20 30 40 50