Con trỏ là biến lưu trữ địa chỉ của biến khác.
Đặc điểm con trỏ
- Tiết kiệm không gian bộ nhớ.
- Thực thi nhanh do truy cập trực tiếp địa chỉ bộ nhớ.
- Quản lý bộ nhớ hiệu quả: cấp phát/giải phóng động.
- Sử dụng với cấu trúc dữ liệu.
Khai báo con trỏ
int *p;
Ý nghĩa: p là biến con trỏ lưu địa chỉ của biến kiểu int.
Khởi tạo con trỏ
Dùng toán tử địa chỉ (&):
int qty = 175;
int *p;
p = &qty;

Truy cập giá trị qua con trỏ
Dùng toán tử gián tiếp (*):
Chương trình mẫu
#include <stdio.h>
void main() {
int a = 2;
int *p;
// Liên kết con trỏ với biến
p = &a;
// In thông tin
printf("Kích thước int: %d\n", sizeof(int)); // 4
printf("Địa chỉ của %d: %p\n", a, (void*)p); // Địa chỉ
printf("Giá trị tại %d: %d\n", a, *p); // 2
printf("Giá trị địa chỉ tiếp theo: %d\n", *(p+1)); // Giá trị rác
printf("Địa chỉ tiếp theo: %p\n", (void*)(p+1)); // Địa chỉ +4
// Ép kiểu con trỏ sang char*
char *p0 = (char*)p;
printf("\nKích thước char: %d\n", sizeof(char)); // 1
printf("Địa chỉ (char*): %p\n", (void*)p0);
printf("Giá trị byte đầu (char*): %d\n", *p0); // Byte đầu của 2 = 2
printf("Giá trị byte 2 (char*): %d\n", *(p0+1)); // Byte 2 = 0
printf("Địa chỉ byte 2: %p\n", (void*)(p0+1)); // Địa chỉ +1
}
Kết quả chạy
Kích thước int: 4
Địa chỉ của 2: 0x61FE1C
Giá trị tại 2: 2
Giá trị địa chỉ tiếp theo: 10818512 (rác)
Địa chỉ tiếp theo: 0x61FE20 (+4 bytes)
Kích thước char: 1
Địa chỉ (char*): 0x61FE1C
Giá trị byte đầu: 2
Giá trị byte 2: 0
Địa chỉ byte 2: 0x61FE1D (+1 byte)