Con trỏ (Pointer)
Trong C, *p là giá trị tại con trỏ, p là địa chỉ.
const int* và int const*: con trỏ trỏ đến int hằng, giá trị int không thể thay đổi. Nhưng con trỏ có thể trỏ đến int hằng khác.
const int* const: con trỏ hằng trỏ đến int hằng. Cả con trỏ và giá trị đều không thể thay đổi.
Quy tắc: Đọc từ phải sang trái.
// con trỏ hằng trỏ đến int hằng const int * const // con trỏ trỏ đến int hằng const int *
Ví dụ (C)
Bỏ comment các dòng lỗi để xem lỗi biên dịch.
#include <stdio.h>
int main() {
// Ví dụ: int const* (tương đương const int*)
const int p = 5;
int const* q = &p; // q trỏ đến int hằng
// *q = 7; // LỖI: assignment of read-only location '*q'
const int r = 7;
q = &r; // OK: q trỏ đến int hằng khác
printf("%d", *q);
// Ví dụ: const int* const
int const* const s = &p;
// *s = 7; // LỖI: không thay đổi giá trị
// s = &r; // LỖI: không thay đổi con trỏ
return 0;
}
Kết quả đầu ra
7