Professional Documents
Culture Documents
Pointer
Pointer
- Mục đích: tạo ra một biến khác cùng dữ liệu - Biến dùng để lưu trữ địa chỉ của biến khác
nhưng sử dụng chung vùng nhớ - Có địa chỉ độc lập
Mọi hành vi thay đổi giá trị của i_ref đều tác động - Giá trị bên tròng vùng nhớ của con trỏ là địa chỉ
trực tiếp đến i1 của biến mà nó trỏ tới
Toán tử trỏ đến - Dùng để xác định kiểu dữ liệu của biến mà con
- &(*i) lấy ra giá trị của vùng nhớ + thay đổi giá trị trỏ trỏ đến
bên trong vùng nhớ Toán tử lấy địa chỉ (*p = &i)
- Không thể thay đổi địa chỉ sau lần tham chiếu đầu - Gán giá trị con trỏ: Giá trị mà biến con trỏ lưu
tiên trữ là địa chỉ của biến khác (cùng kiểu dữ liệu
với biến con trỏ)
Toán tử con trỏ (*p = &I; cout<<*p)
- Xuất ra giá trị của vùng nhớ được quản lí bởi con
trỏ
Toán tử gán
*p = &I;
*q = &j;
+ *p = *q thay đổi giá trị con trỏ
+ p = q thay đổi địa chỉ
- Hai con trỏ cùng kiểu: gán trực tiếp không cần
toán tử lấy địa chỉ (int *p1, *p2; ptr1 = &value;
ptr2 = ptr1);
- 1 con trỏ có thể trỏ đến địa chỉ khác sau khi đã
được gán giá trị
- Toán tử con trỏ: Không cần tạo biến mới (tham chiếu)
- Toán tử gán
Truyền đối số
Truyền tham chiếu là truyền địa chỉ ô nhớ của biến, do đó khi thay đổi giá trị của
biến bên trong phương thức thì giá trị của biến cũng bị thay đổi bên ngoài phương
thức.
Truyền tham trị là truyền giá trị của biến (không phải là địa chỉ ô nhớ), khi đó
phương thức sẽ tự động tạo ra một địa chỉ ô nhớ mới để lưu trữ giá trị này, do đó
nó chỉ được thay đổi trong phương thức hiện hành và giá trị của biến không bị thay
đổi bên ngoài phương thức hiện hành.
Giá trị của x chỉ bị thay đổi trong
hàm tc (đối với hàm tc khi chưa có
số truyền vào)
Name Con trỏ hằng Hằng con trỏ Hằng con trỏ hằng
const <data_type> *<name_variable> <data_type> *const const <data_type> * const
Syntax
= <address of variable> <name_variable> = <address of <name_variable> = <address
variable> of variable>
- trỏ đến 1 vùng nhớ hằng mà ở - Đổi giá trị, không đổi địa - Không thay đổi được
1 số IDE chặn việc sử dụng chỉ vùng nhớ và giá trị
con trỏ thông thường trỏ đến - ít được dùng
- không muốn user thay đổi
GIÁ TRỊ VÙNG NHỚ thông
Purpose
qua con trỏ hằng
- thường được dùng chủ yếu
trong tham số hàm, đối số chỉ
read-only để không làm thay
đổi đối số
Cases Wrong Right Wrong Right Wrong Right
const int value = 5; int value1 = int value1 = 10; int value = 10; int value = 10;
int *p = &value 5; int value2 = 20; int *const p = const int *const
*p = 20 const int *p int *const p = &value; p = &value;
const int value = 10; = &value1; &value; *p = 20;
const int *p = &value; int value 2 = p = &value2
*p = 20 6;
int value = 5; *p =
const int *p = &value; &value2
int value = 10; lúc này
const int *p = &value; thay đổi
value = 20 //vì nó được bởi vì
không là hằng thay đổi ĐỊA
*p = 20 // lỗi vì nó là CHỈ không
hằng phải GIÁ
TRỊ