Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 7

Tham chiếu (ref) Con trỏ (p)

- 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ử lấy địa chỉ


- Toán tử con trỏ

- 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)

Khi hàm tc có số truyền vào


(x = 4) ngay trong hàm thì
biến ở int main không làm
thay đổi giá trị trong hàm
Truyền tham chiếu khi cùng địa chỉ rồi thì
chỉ cần sự thay đổi nhỏ bên trong hàm,
nó sẽ thay đổi từ khi bắt đầu đến hết
chương trình

Truyền địa chỉ vô nhưng khi trong


hàm kia đã có số thì giá trị ở ngoài
không được truyền vào, chỉ có địa
chỉ được vào
Truyền con trỏ như truyền tham
chiếu, tuy nhiên, giá trị bị thay đổi
nhưng địa chỉ thì vẫn vậy

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Ị

ENUM DATA_TYPE: https://cpp.daynhauhoc.com/9/0-kieu-liet-ke-enum/


CON TRỎ VOID
- cần được ép kiểu trước khi sử dụng toán tử *
- Ứng dụng:
+ Nếu con trỏ void kh xác định được kiểu dữ liệu vùng nhớ mà nó trỏ tới  lấy thông tin kiểu
con trỏ theo cách khác(thêm tham số, biến cho con trỏ trỏ tới)  ép kiểu con trỏ tới kiểu cụ thể
CON TRỎ HÀM
- là biến lưu trữ địa chỉ của hàm THÔNG QUA ĐÓ ta có thể gọi hàm mà nó trỏ tới
- các tham số mặc định của hàm KHÔNG GỌI ĐƯỢC thông qua con trỏ hàm
Ví dụ: void abc(int x, int y = 10)
 Truyền hàm vào hàm dưới dạng đối số

You might also like