01/10/2018, 13:54
Con trỏ trỏ đến hàm khác với hàm trả về con trỏ thế nào vậy các bạn
Cho mình hỏi:
-
Khi nào mình dùng con trỏ trỏ đến hàm?
VD: int (*A)(int a, int b) -
Khi nào mình dùng hàm trả về 1 con trỏ?
VD Node* CreateNode(int x)
Chúng khác nhau ở chỗ nào? Có minh họa để so sánh thì thật tuyệt.
Bài liên quan
Hi toan.
thank bạn
bạn ơi bạn có thể giải thích giúp mình cơ chế hoạt động của hàm trả về con trỏ k bạn
như ví dụ như
Hi toan.
TL; DR
Đây sẽ là bài rep dài nhất lịch sử và không bao giờ lặp lại lần hai, cơ bản là mình đang quá rảnh nên sẽ reply giúp bạn những vấn đề bạn đang mắc phải với C++
1. Hàm và return
Trong toán học có f(x) tượng trưng cho sự biến thiên của hàm số f theo x.
Giả sử ta có hàm số
y = f(x) = ax + b (a, b thuộc R)
Để biểu diễn hàm số này trên C++ ta sẽ làm như sau (cho a=3, b=5)
Đó là mục đích của return không hơn không kém
Còn nữa tại đây: https://github.com/Jam3/math-as-code/blob/master/README.md
2. Con trỏ hàm
Là một con trỏ giữ địa chỉ của hàm.
Trong C++, mọi thứ đều có địa chỉ, tất cả đều có thể quản lí được qua con trỏ.
Việc sử dụng con trỏ hàm thường dùng để callback, ngoài ra không hay được sử dụng khi viết code cá nhân, tuy nhiên nó có nhiều trong các library. Hầu như dùng lib nào cũng có mặt nó, nhưng nó ít được biểu diễn dưới dạng một biến số thực sự mà chỉ là parameter của hàm.
Sau khi ra mắt modern C++ thì con trỏ hàm ít được sử dụng mà thay vào đó là lambda và std::function với chức năng tương tự và có thể mix với nhau.
Có thể nói con trỏ hàm là một thứ tạo ra để giữ địa chỉ của hàm và gọi hàm đó, đi đêm vài ngày với nó là quen ngay.
3. Hàm con trỏ
Là hàm trả về một con trỏ/địa chỉ, không phải chỉ cấp phát động. Cứ là con trỏ là được. Nhớ là nó phải tồn trong suốt quá trình hàm được gọi
Với cấp phát động:
Có thể thấy hàm con trỏ là thứ giúp ta quản lí một dữ liệu động, có thể mang vác đi mọi nơi, dữ liệu của nó cũng chính là biến mà hàm trả về.