Gọi theo Tham chiếu vs Gọi theo Giá trị: Sự khác biệt và So sánh

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

  1. 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.
  2. 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.
  3. 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 tham chiếu vs Gọi theo giá trị

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.

Cũng đọc:  Thủ tục lưu trữ so với Chức năng: Sự khác biệt và So sánh

Bảng so sánh

Các thông số so sánhGọi bằng tham chiếuGọi theo giá trị
BiếnBiến được thông qua.Bản sao của biến được thông qua.
Giá trị biếnNhữ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 đầuNó đượ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ĩaNó sử dụng một biến để truyền.Nó sử dụng bản sao của biến để chuyển.
Ghim cái này ngay để nhớ sau
Ghim cái này

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ị.

Cũng đọc:  RTOS vs OS: Sự khác biệt và so sánh

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ị

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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. 
dự án
  1. https://www.jstor.org/stable/3857812
  2. ftp://prog.vub.ac.be/education/EMOOSE/ReuseSlides/merge-papers/Jackson&al1994-semanticDiff.pdf
chấm 1
Một yêu cầu?

Tôi đã nỗ lực rất nhiều để viết bài đăng trên blog này nhằm cung cấp giá trị cho bạn. Nó sẽ rất hữu ích cho tôi, nếu bạn cân nhắc chia sẻ nó trên mạng xã hội hoặc với bạn bè/gia đình của bạn. CHIA SẺ LÀ ♥️

Sandeep Bhandari
Sandeep Bhandari

Sandeep Bhandari có bằng Cử nhân Kỹ thuật Máy tính của Đại học Thapar (2006). Ông có 20 năm kinh nghiệm trong lĩnh vực công nghệ. Anh rất quan tâm đến các lĩnh vực kỹ thuật khác nhau, bao gồm hệ thống cơ sở dữ liệu, mạng máy tính và lập trình. Bạn có thể đọc thêm về anh ấy trên trang sinh học.

Bình luận

Chúng tôi sẽ không công khai email của bạn. Các ô đánh dấu * là bắt buộc *

Bạn muốn lưu bài viết này cho sau này? Nhấp vào trái tim ở góc dưới cùng bên phải để lưu vào hộp bài viết của riêng bạn!