C++ vượt qua giá trị hoặc tham chiếu
main() { int i = 10, j = 20; swapThemByVal(i, j); cout << i << " " << j << endl; // displays 10 20 swapThemByRef(i, j); cout << i << " " << j << endl; // displays 20 10 ... } void swapThemByVal(int num1, int num2) { int temp = num1; num1 = num2; num2 = temp; } void swapThemByRef(int& num1, int& num2) { int temp = num1; num1 = num2; num2 = temp; } Truyền tham chiếu có nghĩa là chuyển tham chiếu của một đối số trong hàm gọi đến tham số hình thức tương ứng của hàm được gọi. Hàm được gọi có thể sửa đổi giá trị của đối số bằng cách sử dụng tham chiếu của nó được truyền vào Show Ví dụ sau đây cho thấy cách các đối số được truyền bằng tham chiếu. Các tham số tham chiếu được khởi tạo với các đối số thực khi hàm được gọi CCNX06A
Khi hàm 1 được gọi, giá trị của biến 2 và 3 được hoán đổi vì chúng được truyền theo tham chiếu. đầu ra là.
Để sửa đổi một tham chiếu đủ điều kiện bởi từ hạn định 4, bạn phải loại bỏ hằng số của nó bằng toán tử 5. Ví dụ. Ví dụ này xuất ra 6Truyền theo tham chiếu hiệu quả hơn truyền theo giá trị, vì nó không sao chép các đối số. Tham số chính thức là bí danh cho đối số. Khi hàm được gọi đọc hoặc ghi tham số hình thức, nó thực sự đọc hoặc ghi chính đối số đó Sự khác biệt giữa pass-by-reference và pass-by-pointer là con trỏ có thể được 7 hoặc gán lại trong khi các tham chiếu thì không thể. Sử dụng chuyển từng con trỏ nếu 7 là một giá trị tham số hợp lệ hoặc nếu bạn muốn gán lại con trỏ. Nếu không, hãy sử dụng các tham chiếu không đổi hoặc không cố định để truyền đối số Theo cách này, giá trị của đối số trong hàm gọi có thể được sửa đổi bởi hàm được gọi Ví dụ sau đây cho thấy cách các đối số được truyền bằng tham chiếu. Trong C++, các tham số tham chiếu được khởi tạo với các đối số thực khi hàm được gọi. Trong C, các tham số con trỏ được khởi tạo giá trị con trỏ khi hàm được gọi Chỉ bắt đầu với C++ Chỉ kết thúc C ++Chỉ bắt đầu từ C Chỉ hết CKhi hàm 1 được gọi, các giá trị thực của các biến 2 và 3 được trao đổi vì chúng được truyền theo tham chiếu. đầu ra là. Chỉ bắt đầu với C++Để sửa đổi một tham chiếu đủ điều kiện 4, bạn phải loại bỏ hằng số của nó bằng toán tử 5. Ví dụ sau minh họa điều này. Ví dụ này xuất ra 6 Cuộc gọi theo phương thức tham chiếu truyền đối số cho hàm sao chép địa chỉ của đối số vào tham số chính thức. Bên trong hàm, địa chỉ được sử dụng để truy cập đối số thực được sử dụng trong cuộc gọi. Nó có nghĩa là những thay đổi được thực hiện đối với tham số ảnh hưởng đến đối số đã truyền Để truyền một giá trị bằng tham chiếu, các con trỏ đối số được truyền cho các hàm giống như bất kỳ giá trị nào khác. Vì vậy, theo đó, bạn cần khai báo các tham số của hàm dưới dạng các kiểu con trỏ như trong hàm hoán đổi () sau đây, hàm này trao đổi các giá trị của hai biến số nguyên được trỏ tới, bởi các đối số của chúng ________số 8Bây giờ chúng ta hãy gọi hàm swap() bằng cách chuyển các giá trị theo tham chiếu như trong ví dụ sau – #include int main () { /* local variable definition */ int a = 100; int b = 200; printf("Before swap, value of a : %d\n", a ); printf("Before swap, value of b : %d\n", b ); /* calling a function to swap the values */ swap(&a, &b); printf("After swap, value of a : %d\n", a ); printf("After swap, value of b : %d\n", b ); return 0; } void swap(int *x, int *y) { int temp; temp = *x; /* save the value of x */ *x = *y; /* put y into x */ *y = temp; /* put temp into y */ return; } Chúng ta hãy đặt đoạn mã trên vào một tệp C duy nhất, biên dịch và thực thi nó, để tạo ra kết quả sau - 0Nó cho thấy rằng thay đổi cũng đã phản ánh bên ngoài chức năng, không giống như gọi theo giá trị trong đó các thay đổi không phản ánh bên ngoài chức năng Tốt hơn là chuyển theo tham chiếu hoặc giá trị?Sử dụng truyền theo giá trị khi bạn chỉ "sử dụng" tham số cho một số tính toán, không thay đổi tham số cho chương trình máy khách . Trong truyền theo tham chiếu (còn gọi là truyền theo địa chỉ), một bản sao địa chỉ của tham số thực tế được lưu trữ.
C có hỗ trợ cuộc gọi theo tham chiếu không?Biến con trỏ cần xác định để lưu trữ giá trị địa chỉ của biến. Ghi chú. Trong C, chúng ta sử dụng con trỏ để gọi theo tham chiếu . Trong C++, chúng ta có thể sử dụng con trỏ hoặc tham chiếu để chuyển qua tham chiếu.
Chuyển qua tham chiếu có nhanh hơn trong C không?Theo nguyên tắc thông thường, truyền theo tham chiếu hoặc con trỏ thường nhanh hơn truyền theo giá trị , nếu lượng dữ liệu được truyền theo giá trị . |