30/09/2018, 16:56
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ả.
Bài liên quan
Thứ nhất, Con trỏ nó có khả năng hóa trang… vì thế nó mạnh 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ờ.
Bạn ví dụ cụ thể cho mình được không ???
Nôm na là thằng p có thể thành a hoặc b.
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
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àmXYZ
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ếnA
và truyền vào hàmXYZ
, trong hàm này dù e có thay đổi biếnA
thì kết thúc hàm, biếnA
vẫn mang giá trị ban đầu khi chưa gọi hàmXYZ
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ếnA
hoặc con trỏ giữ địa chỉ của biếnA
thì giá trị củaA
sẽ thay đổi sau khi gọi hàm.Cái này em thấy giống ByVal với ByRef trong C#/VB.Net
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ảnga
.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…
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, …
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).
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 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
P/s: Mình chỉ biết thế thôi có sai sót chỗ nào mong bạn thông cảm
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
đà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ỏ
Trỏ đâu đánh đấy
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 ?
java thì Double hay Int là con trỏ, còn int là một int bình thường. Hay
HocSinh hs = new HocSinh();