Tại sao phải dùng con trỏ trong c++

This post was flagged by the community and is temporarily hidden.

1 Like

zạ…em cảm on anh nhiều

Có một tác dụng của con trỏ nữa, bạn có thể xem ví dụ sau:
Chẳng hạn bạn có một hàm muốn đổi chỗ 2 số nguyên chẳng hạn:
Nếu không dùng con trỏ:

void Swap(int x, int y)
{
int temp = x;
x = y;
y = tem;
}
int main()
{
int a = 1, b = 2;
std::cout << "Truoc khi goi ham Swap: a = " << a  << ", b = " << b;
Swap(a, b);
std::cout << "Sau khi goi ham Swap: a = " << a  << ", b = " << b;
return 0;
}

Bây giờ trong hàm main bạn thử khai báo 2 số nguyên rồi gọi hàm này, sau đó in ra 2 số đó xem nó có thay đổi giá trị cho nhau ko nhé, câu trả lời là không, vì khi khi ta truyền như vậy thì đoạn code trong hàm main ở dòng Swap(a, b) sẽ được hiểu là:

x = a;
y = b;
int temp = x;
x = y;
y = temp;

Rõ ràng hàm này không thể thực hiện chức năng như mong muốn vì nó chỉ làm trên 2 bản sao của a và b mà thôi.
Bây giờ nếu ta dùng con trỏ:

void Swap(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}

Bây giờ hàm main thay vì truyền giá trị của a và b thì ta truyền vào địa chỉ của chúng

int main()
{
int a = 1, b = 2;
std::cout << "Truoc khi goi ham Swap: a = " << a  << ", b = " << b;
Swap(&a, &b);
std::cout << "Sau khi goi ham Swap: a = " << a  << ", b = " << b;
return 0;
}

Giải thích:
Chỗ gọi hàm Swap(&a, &b) sẽ được hiểu như sau:

x = &a; // Lưu ý x là con trỏ cho nên giá trị của nó là địa chỉ của 1 biến
y = &b; // y tương tự x
int temp = *x; // *x chính là lấy giá trị mà con trỏ x đang trỏ tới địa chỉ đấy.(ở đây là địa chỉ của a)
*x = *y;
*y = temp;

Do đó hàm Swap lúc này đã thỏa mãn được yêu cầu đổi giá trị 2 số a và b.
Ngoài ra trong C++ thì bạn còn có thể dùng các truyền tham chiếu bằng cách dùng dấu “&”

Mình hiểu sao nói vậy, nếu có gì sai sót mong mọi người đòng góp thêm ạ :slight_smile:

8 Likes

Ban se hoc nhung bai sau cua anh dat ve cai nay, hen nhu bai “Cấp pháp động”.

1 Like

cho mình xin link dạy được k ?

1 Like

link fb cua minh ha ban

hay qua ban, cam on ban nhiu

kk có đầy bạn ơi,bạn o đâu

Bạn BeTapCode bắt bẻ câu chữ quá. Với mức tìm hiểu của chủ top thì giải thích vậy là hợp lý rồi, bạn nguy hiểm quá. Còn con trỏ thì hoàn toàn có thể trỏ tới một địa chỉ Vật lý xác định của riêng từng con chip. Nếu địa chỉ đó nằm ở vùng mà địa chỉ của nó là cố định trên memory map. Ví dụ như Peripheral.

2 Likes

A post was merged into an existing topic: Topic này chứa các post được cho là Off-topic

A post was removed.

quá hay cậu ơi, cảm ơn cậu

khi bạn khai báo biến cần cấp phát vùng nhớ để lưu trữ, dùng con trỏ để quản lý bộ nhớ đó. Bạn học khái niệm cấp phát động là cấp phát vùng trong lúc chạy chương trình, nếu không có con trỏ bạn không thể làm những trò như : vào một game, chọn số lượng lính khi mới vào dàn trận

2 Likes

Hiểu đơn giản thì khi thực thi hàm mà ko thay đổi giá trị của biến truyền vào thì ko cần dùng con trỏ, còn thay đổi thì phải dùng con trỏ. Ví dụ hàm bật tắt đơn giản quạt(int bật), quạt(int tắt) thì ko cần con trỏ, còn hàm tínhtoán(int input, int *output) thì phải dùng.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?