Thật sự thì con trỏ dùng làm gì?

Em học con trỏ trong C/C++, có hiểu nhưng không biết nó có tác dụng gì khi có thể trỏ đến địa chỉ của một vùng nhớ?
Nghe nói con trỏ rất quan trọng nhưng không thể hiểu được nó mạnh ở điểm nào, nó có ưu điểm gì ?
Và khi nào nào thì nên dùng con trỏ để xử lí?
Đa số e dùng C++ để giải bài tập nhưng chưa bao giờ phải sử dụng con trỏ cả.

7 Likes

Thứ nhất, Con trỏ nó có khả năng hóa trang… vì thế nó mạnh :smile: bạn có thể trở thành bất kì ai, chiêu gì cũng có thì mạnh phải rồi.
Thứ hai, mình nghĩ là do có một số cấu trúc dữ liệu dùng con trỏ mới mô phỏng được.
Thật ra không nên gọi là mạnh mà gọi là quan trọng mới đúng.
Còn khi nào nên dùng con trỏ thì vô bờ.

6 Likes

Bạn ví dụ cụ thể cho mình được không ???

   int a=5;
   int b=4;
   int *p=&a;
   *p=7;
   p=&b;
   *p=6;

Nôm na là thằng p có thể thành a hoặc b. :grin:

Mới đàm đạo với mấy sư huynh về vấn đề này, và được mấy huynh dạy: chẳng làm gì cả, thích thì dùng thôi

9 Likes

Cái đơn giản nhất mà bạn có thể hình dung là việc cấp phát vùng nhớ một cách linh hoạt sau khi con trỏ được tạo ra. Bạn có thể cấp cho nó một dung lượng bộ nhớ lúc đầu, sau đó bạn có thể thay đổi dung lượng trong quá trình chạy chương trình.

Con trỏ dùng để thao tác với các biến địa chỉ.
Lấy 1 ví dụ đơn giản, e có 1 biến A, e gọi 1 hàm XYZ nào đó với tham số là A, bình thường chương trình sẽ tạo 1 bản copy của biến A và truyền vào hàm XYZ, trong hàm này dù e có thay đổi biến A thì kết thúc hàm, biến A vẫn mang giá trị ban đầu khi chưa gọi hàm XYZ vì thực chất e thay đổi trên bản copy, nhưng nếu e truyền địa chỉ của biến A hoặc con trỏ giữ địa chỉ của biến A thì giá trị của A sẽ thay đổi sau khi gọi hàm.

15 Likes

Cái này em thấy giống ByVal với ByRef trong C#/VB.Net :blush:

2 Likes

Tất nhiên là e biết thế, nhưng ngoài ra còn có thể sử dụng để làm gì không. Hay chỉ dùng để thay đổi giá trị của một biến trên một hàm ngoài scope khai báo biến đó thôi ???

Còn nhiều chứ e, ví dụ khi e khai báo 1 mảng 1 chiều int a[100], thì a lúc này thực chất là 1 con trỏ giữ địa chỉ phần tử đầu tiên của mảng a.
Hay trong danh sách liên kết, người ta thường dùng các con trỏ để liên kết các phần tử trong danh sách với nhau…

1 Like

Cấp phát động , con trỏ hàm công dụng rất lớn trong việc tái sử dụng mã nguồn, tùy biến mã nguồn. Biết con trỏ thì mới sử dụng được 1 số thư viện STL của C++ như list, stack, Algorithm, vector, …

3 Likes

Cơ bản là ngôn ngữ đã che mất con trỏ ở nhiều chỗ nên mình ko thấy sự lợi hại của nó.
Đơn cử trong Java mọi đối tượng đền là con trỏ trừ các biến thuộc primitive types (byte, short, int, long, char, boolean, float và double).

1 Like

Theo mình thì con trỏ có tác dụng cấp phát vùng nhớ khi chạy chương trình :slight_smile: ví dụ như bạn muốn xử lý ảnh hay video thì không thể khai báo biến chứa nó vào chương trình được. Khi làm thế file .exe chương trình sẽ rất lớn. Thay vào đó bạn sử dụng con trỏ để cấp phát bộ nhớ cho dữ liệu nạp vào và lưu nó ở trên phần RAM chưa sử dụng. Khi sử dụng xong thì giải phóng nó đi :slight_smile:
P/s: Mình chỉ biết thế thôi :slight_smile: có sai sót chỗ nào mong bạn thông cảm :slight_smile:

Còn giúp giảm bộ nhớ nữa một biến bình thường là 8byte còn biến con trỏ chỉ 4byte

Dùng con trỏ không giảm được bộ nhớ.

Bạn tham khảo:

http://diendan.congdongcviet.com/threads/t42977::tim-hieu-ban-chat-cua-con-tro-tu-co-ban-den-nang-cao.cpp

3 Likes

đào mộ một tý . cái con-trỏ này mình cũng thích nên góp tý .
đầu tiên , HDH ( hệ điều hành ) khôn lắm . nó k cho chương trình sử dụng bộ nhớ vô tư đâu . mình nhớ là chỉ cho 256KB thôi . nên việc dùng con trỏ không giảm bộ nhớ . với dung lượng biến con trỏ là 4B hay 8B tùy vào CPU với HDH b sử dụng . con trỏ dùng thích lắm . coder dùng con trỏ để ăn cắp “tiền” của bọn HDH . cracker dùng con trỏ để crack soft . cuối cùng , mình biết con trỏ là cái làm nên cái gọi là lập-trình-hướng-đối-tượng hiện tại .

Chốt lại là mỗi mục đích : -> Dùng để trỏ :smile:
Trỏ đâu đánh đấy :blush:

3 Likes

con trỏ không liên quan gì đến cấp phát bộ nhớ đâu Bạn. Chỉ có stack và heap thôi

Vậy tại sao con trỏ truyền vào một hàm gì đó lại làm thay đổi dữ liệu ?

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