Con trỏ là miền giá trị của một biến con trỏ là địa chỉ ô nhớ
Ví dụ: int *n; Trong ví dụ trên ta nói n là một biến con trỏ kiểu số nguyên. Miền giá trị của biến n là địa chỉ ô nhớ. Ví dụ 2:
Struct phanso { int tu; int mau; }; typedef struct phanso PHANSO; PHANSO *ps;
Trong ví dụ trên ta nói ps là một biến con trỏ kiểu cấu trúc PHANSO. Miền giá trị của biến ps là địa chỉ ô nhớ.
CÁch dùng
CÁch 1: Sử dụng con trỏ để giữ địa chỉ của một biến
cách 2: sử dụng con trò để xin cấp phát và thu hồi bộ nhớ.
Hai toán tử cơ bản
Toán tử &: được sử dụng để lấy địa chỉ của một biến.
&
TOán tử *: được sử dụng để lấy và cập nhật giá trị tại địa chỉ mà biến con trò đang giữ.
*
CẤp phát và thu hồi
Cấp phát: để cấp phát bộ nhớ cho một biến con trỏ ta có thể sử dụng các hàm: malloc, calloc, ralloc hoặc new.
Thu hồi: để thu hồi bộ nhớ đã cấp phát cho một biến con trỏ ta dùng hàm free hoặc delete.
bắt buộc
COn trỏ cấu trúc
Để truy xuất đến một thành phần của biến con trỏ cấu trúc ta sử dụng toán tử mũi tên (->).
->
Địa chỉ ô nhớ
Để xuất một địa chỉ ô nhớ ra màn hình ta sử dụng mã định dạng %p.
%p
Ví dụ 3: VIết chương trình khai báo một con trỏ số nguyên a. Cấp phát bộ nhớ có kích thước bằng kích thước của kiểu số nguyên và gán giá trị 9 tại vùng nhớ được cấp phát.
#include #inclide void main() { int *a; a= new int; *a=9; delete a; }
Ví dụ 4: Viết chương trình nhập và xuất mảng một chiều các số thực bằng cách sử dụng kỹ thuật con trỏ.
#include #inclide void main() { float *a; int n; printf("Nhap n:"); scanf("%d", &n); a= new float[n]; int i=0; while( n < i) { printf("Nhap a[%d]:",i); scanf("%f", &a[i]); i++; } for(int j=0; j < n; j++) printf("%8.2f",a[j]); delete []a; }
Ví dụ 5: Viết chương trình nhập và xuất mảng một chiều các phân số bằng cách sử dụng kỹ thuật con trỏ.
#include #include struct ps { int tu; int mau; }; typedef struct ps PHANSO; void Nhap(PHANSO $x) { printf("nhap tu so:"); scanf("%d",&x.tu); printf("nhap mau so:"); scanf("%d", &x.mau); } void Xuat(PHANSO x) { printf("%d/%d", x.tu,x.mau); } void main() { PHANSO *ps; int n; printf("Nhap n:"); scanf("%d", &n); ps = new PHANSO[n]; for(int i=0;i < n ;i++) { printf("Nhap ps[%d]:",i); Nhap(ps[i]); } for(int j=0; j < n ; j++) XUat(ps[j]); delete []ps; }