Con trỏ (Pointer) trong C là một biến, nó còn được gọi là locator hoặc indicator chỉ ra một địa chỉ của một giá trị.
Nội dung chính
Các biểu tượng được sử dụng trong con trỏ
Biểu tượng | Tên | Mô tả |
---|---|---|
& | Địa chỉ của toán tử | Xác định địa chỉ của một biến. |
* | Toán tử liên kết. | Truy cập đến giá trị của địa chỉ. |
Toán tử địa chỉ
Toán tử địa chỉ '&' trả về địa chỉ của một biến, bạn cần phải sử dụng '%x' để hiện thị địa chỉ của một biến.
#include<stdio.h> int main() { int number = 50; printf("Gia tri cua number la %d\n", number); printf("Dia chi cua number la %x", &number); return 0; }
Kết quả:
Gia tri cua number la 50 Dia chi cua number la 23fe4c
Khai báo con trỏ trong C
Con trỏ bằng ngôn ngữ C được khai báo bằng cách sử dụng dấu '*'.
int *a; //con tro tro toi int char *c; //con tro tro toi char
Ví dụ con trỏ trong C
Ví dụ 1: sử dụng con trỏ để in ra màn hình địa chỉ và giá trị mà con trỏ trỏ đến.
Như bạn thấy trong hình trên, biến con trỏ lưu trữ địa chỉ của biến số ví dụ fff4. Giá trị của biến số là 50. Nhưng địa chỉ của biến con trỏ p là aaa3.
Bằng cách sử dụng toán tử * ( toán tử liên kết ), chúng ta có thể in giá trị của biến con trỏ p.
#include<stdio.h> int main() { int number = 50; int *p; p = &number; // luu tru dia chi cua bien number printf("Dia cua con tro p la %d\n", *p); printf("Dia chi cua con tro p la %x", p); return 0; }
Kết quả:
Dia cua con tro p la 50 Dia chi cua con tro p la 23fe44
Ví dụ 2: sử dụng con trỏ để hoán đổi 2 số mà không sử dụng biến số thứ 3.
#include<stdio.h> int main() { int a = 10, b = 20; int *p1 = &a,*p2 = &b; printf("Truoc khi hoan doi: *p1=%d *p2=%d\n", *p1, *p2); // hoan doi *p1 = *p1 + *p2; *p2 = *p1 - *p2; *p1 = *p1 - *p2; printf("Sau khi hoan doi: *p1=%d *p2=%d", *p1, *p2); return 0; }
Kết quả:
Dia cua con tro p la 50 Dia chi cua con tro p la 23fe44
Con trỏ NULL (NULL Pointer)
Một con trỏ không được gán bất kỳ giá trị nào được gọi là con trỏ NULL. Nếu không có địa chỉ nào được chỉ định trong con trỏ tại thời điểm khai báo, bạn có thể chỉ định giá trị NULL. Đó là một cách tiếp cận tốt hơn.
int *p = NULL;
Trong hầu hết các thư viện, giá trị của con trỏ là 0 (zero).
Sử dụng con trỏ trong C
Có rất nhiều cách sử dụng con trỏ trong lập trình C.
Phân bổ bộ nhớ động
Trong ngôn ngữ C, chúng ta có thể tự động phân bổ bộ nhớ bằng các hàm malloc() và calloc() nơi con trỏ được sử dụng.
Mảng, hàm và cấu trúc (structure)
Con trỏ trong ngôn ngữ c được sử dụng rộng rãi trong các mảng, các hàm và cấu trúc. Nó giúp chúng ta viết ít code hơn và cải thiện hiệu suất. Ví dụ, sử dụng con trỏ trong việc call by value và call by reference.