3.5.6 Truyền tham trị cho hàm

Truyền các tham số theo giá trị: chúng ta quay lại nhưng nói về một vấn đề mới

Có thể sử dụng cách truyền tham trị nhưng vẫn có thể lấy giá trị ra bên ngoài các hàm mặc dù bản chất của truyền tham trị là một chiều ?

Câu trả lời là “có”. Chúng tôi sẽ chỉ cho bạn cách thực hiện điều đó, nhưng chúng tôi muốn nhấn mạnh rằng đây không phải là cách chúng tôi khuyên bạn nên làm việc đó. Phương pháp này được kế thừa từ ngôn ngữ lập trình C, cái gốc của ngôn ngữ C++, và là cách duy nhất có thể thực hiện giao tiếp hai chiều trong C.

Trong ngôn ngữ C không có cơ chế truyền tham chiếu, nên phải sử dụng các phương pháp khác. Ý tưởng là truyền vào một con trỏ trỏ đến một giá trị chứ không phải là giá trị. Nếu bạn khai báo một hàm với một nguyên mẫu như thế này →

thì bạn cho phép hàm nhận được địa chỉ trỏ đến giá trị int, và do đó cho hàm cơ hội để sửa đổi các giá trị được trỏ bởi tham số.

Bây giờ hãy xem code sau →

Hàm ByPtr lấy một tham số, đó là một con trỏ, và truy xuất giá trị trỏ bởi con trỏ đó bằng toán tử * (dereference).

Lưu ý: nếu p là một con trỏ tới một giá trị, thì *p đại diện cho giá trị đó.

Trên thực tế, các hàm ByPtr thay đổi giá trị của biến variable mà thậm chí biết về sự tồn tại của nó.

Có thể có một số tài liệu hoặc một số người nói rằng đây là phương pháp thứ 3 để truyền tham số cho hàm. Nhưng chúng tôi không đồng ý – vì nó vẫn phương pháp cũ đó là truyền tham trị. Chỉ có điều giá trị ở đây là một con trỏ

Kết quả của chương trình trên như sau