Các chức năng có thể được gọi theo hai cách trong một chương trình. Một phương pháp là gọi theo tham chiếu và phương pháp tiếp theo là gọi theo giá trị. Các phương thức này có thể được phân biệt dựa trên loại giá trị được truyền cho các tham số.
Các tham số được sử dụng trong chúng được gọi là tham số thực tế. Chúng được sử dụng trong nhiều ngôn ngữ lập trình như C, C++ và Java.
Các nội dung chính
- Gọi theo tham chiếu chuyển địa chỉ bộ nhớ của một biến đến một hàm, trong khi gọi theo giá trị sẽ gửi một bản sao giá trị của biến.
- Với lệnh gọi theo tham chiếu, các thay đổi được thực hiện trong một hàm ảnh hưởng trực tiếp đến biến ban đầu, trong khi lệnh gọi theo giá trị khiến biến ban đầu không bị thay đổi.
- Gọi theo tham chiếu tiết kiệm bộ nhớ hơn so với gọi theo giá trị, nhưng nó có thể dẫn đến các tác dụng phụ ngoài ý muốn nếu không được quản lý cẩn thận.
Gọi theo tham chiếu vs Gọi theo giá trị
Giấm trắng, được sử dụng để tẩy rửa hoặc nấu ăn, được tạo ra bằng cách lên men rượu chưng cất, thu được một chất lỏng trong, có vị sắc. Giấm táo được làm bằng cách lên men đường từ táo, có vị dịu nhẹ, hơi ngọt, được dùng trong nước xốt salad và nước xốt.
Gọi theo phương thức tham chiếu được sử dụng để truy cập đối số thực là lệnh gọi hàm. Điều này có nghĩa là các thay đổi chỉ được thực hiện trong tham số sau khi đối số được chuyển.
Nó sử dụng cùng một cấp phát bộ nhớ được sử dụng trong các tham số thực tế. Khi nó gọi một hàm, thay vì sao chép các biến, chính địa chỉ được sử dụng trong cuộc gọi theo tham chiếu.
Gọi theo giá trị là một chương trình con truyền dữ liệu thực của các tham số được sử dụng trong chương trình con.
Trong phương thức này, khi bạn gọi một hàm, bạn đang truyền giá trị cho biến của các đối số trong hàm được gọi để hàm được gọi hoạt động trên giá trị đó. Thay đổi này sẽ không được phản ánh trong chức năng được gọi.
Bảng so sánh
Các thông số so sánh | Gọi bằng tham chiếu | Gọi theo giá trị |
---|---|---|
Biến | Biến được thông qua. | Bản sao của biến được thông qua. |
Giá trị biến | Những thay đổi được thực hiện sẽ ảnh hưởng đến chức năng bên ngoài. | Những thay đổi được thực hiện sẽ không ảnh hưởng đến chức năng bên ngoài. |
Giá trị ban đầu | Nó được sửa đổi. | Nó không được sửa đổi. |
Sự An Toàn | Đối số thực tế là không an toàn. | Đối số thực tế là an toàn. |
Định nghĩa | Nó sử dụng một biến để truyền. | Nó sử dụng bản sao của biến để chuyển. |
Gọi theo tham chiếu là gì?
Nó là một phương thức được sử dụng để truyền đối số cho một hàm. Để lưu trữ địa chỉ của các biến, các biến con trỏ được sử dụng. Trong phương pháp này, các đối số thực tế không an toàn.
Sửa đổi tình cờ có thể được thực hiện. Điều quan trọng là phải xử lý các hoạt động đối số một cách cẩn thận. Nó giúp tránh những thay đổi do nhầm lẫn.
Nó sẽ không tạo ra bất kỳ dữ liệu trùng lặp nào vì nó chỉ giữ một giá trị để có thể tiết kiệm dung lượng bộ nhớ. Nếu một người đọc mã, họ sẽ không thể biết liệu các giá trị trong mã này có bị sửa đổi hay không.
Trong phương pháp này, bảo hành trọn đời là một vấn đề lớn. Nó sẽ trở thành một mối nguy hiểm nếu bạn làm việc với các chương trình đa luồng và lambdas. Để khai báo cuộc gọi theo tham chiếu, bạn nên chuyển một địa chỉ.
Gọi theo tham chiếu khi nói đến lập trình C. Nó truy cập trực tiếp vào các mục dữ liệu và thực hiện các chức năng trên chúng. Nhưng bạn phải cẩn thận vì con trỏ có liên quan đến nó.
Nếu bạn biết trạng thái cụ thể của mục dữ liệu, thì hãy gọi theo phương thức tham chiếu id hoàn hảo. Sửa đổi một bản sao của dữ liệu sẽ không làm được gì hữu ích
Gọi theo tham chiếu có những nguy hiểm mà gọi theo giá trị thì không. Bạn có thể vô tình gán lại một giá trị cho một con trỏ và làm mất nó trong bộ nhớ.
Gọi theo giá trị là gì?
Trong phương pháp này, những thay đổi được thực hiện bên trong hàm của tham số sẽ không có bất kỳ ảnh hưởng nào đến đối số. Chương trình hoán đổi đóng vai trò là ví dụ tốt nhất về chương trình gọi theo giá trị.
Nó giải thích rằng không có thay đổi nào được thực hiện về giá trị mặc dù chúng được thay đổi bên trong hàm. Trong java, phương thức gọi theo giá trị có nghĩa là gọi phương thức đó với tham số của nó là một giá trị.
Trong phương pháp này, các tham số được lưu trữ trong các vị trí bộ nhớ khác nhau. Nếu bạn thực hiện bất kỳ thay đổi nào bên trong tham số vị trí thực tế của người gọi sẽ không bị ảnh hưởng.
Phương pháp này là tốt nhất vì giá trị ban đầu không bị sửa đổi. Nhưng bạn không thể thực hiện bất kỳ thay đổi nào đối với các biến thực tế. Đối số thực tế sẽ an toàn trong phương pháp này vì bạn không thể vô tình thực hiện bất kỳ thay đổi nào.
Phương pháp này bảo toàn dữ liệu vì nó không làm thay đổi biến ban đầu. Đối số ở đây là các biến. Việc thay đổi một biến trong thân hàm không phải là việc trực tiếp. Các biểu thức phức tạp đôi khi có thể hoạt động như đối số.
Nó không hiệu quả về bộ nhớ vì hai bản sao được tạo cho cùng một biến. Nếu kích thước dữ liệu lớn, phương thức gọi theo giá trị sẽ không xử lý chúng. Trong trường hợp đó, các lập trình viên nên thực hiện cuộc gọi theo phương thức tham chiếu.
Sự khác biệt chính giữa Gọi theo Tham chiếu và Gọi theo Giá trị
- Giá trị ban đầu được sửa đổi trong cuộc gọi theo tham chiếu. Mặt khác, trong cuộc gọi theo giá trị, giá trị ban đầu không bị sửa đổi.
- Gọi theo tham chiếu được hỗ trợ bởi các ngôn ngữ lập trình, nhưng nó không mặc định. Mặt khác, gọi theo giá trị hoạt động mặc định trong các ngôn ngữ lập trình.
- Trong Gọi theo tham chiếu, mọi thay đổi được thực hiện trong biến cũng sẽ ảnh hưởng đến biến bên ngoài hàm. Mặt khác, trong lời gọi theo giá trị, mọi thay đổi được thực hiện trong biến sẽ không ảnh hưởng đến biến bên ngoài hàm.
- Gọi theo tham chiếu cho phép bạn thay đổi giá trị của biến. Mặt khác, gọi theo giá trị sẽ không cho phép bạn thực hiện thay đổi.
- Trong cuộc gọi theo tham chiếu, một địa chỉ của giá trị sẽ được chuyển. Nhưng trong cuộc gọi theo tham chiếu, một bản sao của giá trị sẽ được chuyển.