Tham chiếu trong C++

Một biến tham chiếu là một alias, đó là tên khác cho một biến đã đang tồn tại. Khi một tham chiếu được khởi tạo với một biến, thì: hoặc tên biến hoặc tên tham chiếu có thể được sử dụng để tham chiếu tới biến đó.

Hãy sử dụng C++ editor online này để thử viết code trên trình duyệt bạn nhé.

Tham chiếu và con trỏ trong C++

Sử dụng tham chiếu có thể thường gây bối rối cho bạn như với con trỏ, tuy nhiên, có 3 điểm khác nhau giữa tham chiếu và con trỏ trong C++:

Bạn không thể có tham chiếu NULL. Bạn luôn luôn phải giả sử rằng một tham chiếu được kết nối với một phần của kho lưu trữ.

Khi một tham chiếu được khởi tạo cho một đối tượng, nó không thể bị thay đổi để tham chiếu tới đối tượng khác. Các con trỏ có thể được trỏ tới đối tượng khác tại bất kỳ thời điểm nào.

Một tham chiếu phải được khởi tạo khi nó được tạo. Các con trỏ có thể được tạo tại bất kỳ thời điểm nào.

Tạo tham chiếu trong C++

Bạn coi một tên biến như là một label (một nhãn) được đính kèm với vị trí biến trong bộ nhớ. Sau đó, bạn có thể nghĩ về tham chiếu như là label thứ hai được đính kèm với vị trí bộ nhớ đó. Vì thế, bạn có thể truy cập nội dung của biến thông qua: hoặc tên biến ban đầu hoặc tham chiếu. Giả sử chúng ta có ví dụ sau:

int i = 19;

Bạn có thể khai báo các biến tham chiếu cho i như sau:

int& r = i;

Đọc & trong các khai báo này là Tham chiếu. Vì thế, trong khai báo đầu tiên, r là tham chiếu integer được khởi tạo cho i và trong tham chiếu thứ hai, s là tham chiếu double được khởi tạo cho d. Ví dụ sau sử dụng các tham chiếu trong C++:

#include <iostream> 
 using namespace std; 
 int main () 
 { 
      // khai bao cac bien 
      int i; 
      double d; 
      // khai bao cac bien tham chieu 
      int& r = i; 
      double& s = d; 
      i = 5; 
      cout << "Gia tri cua i la: " << i << endl; 
      cout << "Gia tri cua tham chieu toi i la: " << r << endl;
      d = 11.7; 
      cout << "Gia tri cua d : " << d << endl; 
      cout << "Gia tri cua tham chieu toi d la: " << s << endl; 
      return 0; 
 }

Chạy chương trình C++ trên sẽ cho kết quả như hình sau:

Tạo tham chiếu trong C++

Tham chiếu trong C++ thường được sử dụng cho danh sách các tham số hàm và hàm trả về các giá trị. Sau đây là hai khái niệm quan trọng liên quan tới tham chiếu trong C++, bạn sẽ thấy chi tiết ở phía cuối bài:

Khái niệm Miêu tả

Truyền tham số bởi tham chiếu trong C++

C++ hỗ trợ truyền các tham chiếu như là các tham số hàm mà an toàn hơn so với các tham số

Trả về giá trị bởi tham chiếu trong C++

Bạn có thể trả về tham chiếu từ một hàm C++ giống như bất kỳ kiểu dữ liệu khác có thể được trả về

Truyền tham số bởi tham chiếu trong C++

Chúng ta đã thảo luận cách chúng ta triển khai khái niệm gọi bởi tham chiếu bởi sử dụng con trỏ. Dưới đây là ví dụ khác của gọi bởi tham chiếu mà sử dụng tham chiếu trong C++.

#include <iostream> 
 using namespace std; 
 // khai bao ham 
 void traodoi(int& x, int& y); 
 int main () 
 { 
     // Khai bao bien cuc bo: 
     int a = 100; 
     int b = 200; 
     cout << "Truoc khi trao doi, gia tri cua a la: " << a << endl; 
     cout << "Truoc khi trao doi, gia tri cua b la: " << b << endl; 
     /* goi mot ham de trao doi cac gia tri.*/ 
     traodoi(a, b); cout << "Sau khi trao doi, gia tri cua a la: " << a << endl; 
     cout << "Sau khi trao doi, gia tri cua b la: " << b << endl; 
     return 0; 
 } 
 // phan dinh nghia ham de trao doi cac gia tri. 
 void traodoi(int& x, int& y) 
 { 
     int temp; 
     temp = x; 
     /* luu tru gia tri tai dia chi x */ 
     x = y; 
     /* dat gia tri y vao trong x */ 
     y = temp; 
     /* dat gia tri x vao trong y */ 
     return; 
 }

Chạy chương trình C++ trên sẽ cho kết quả như hình sau:

Truyền tham số bởi tham chiếu trong C++

Trả về giá trị bởi tham chiếu trong C++

Một chương trình C++ có thể được làm cho nó dễ dàng hơn để đọc và duy trì bởi sử dụng các tham chiếu thay vì sử dụng con trỏ. Một hàm C++ có thể trả về một tham chiếu theo cách tương tự như nó trả về một con trỏ.

Khi một hàm trả về một tham chiếu, nó trả về một con trỏ ẩn tới giá trị trả về của nó. Theo cách này, một hàm có thể được sử dụng ở phần trái của một lệnh gán. Bạn xét ví dụ sau:

#include <iostream> 
 #include <ctime> 
 using namespace std; 
 double mang[] = {5.6, 11.4, 43.1, 25.6, 20.2}; // phan dinh nghia ham 
 double& tlGiaTri( int i ) 
 { 
     return mang[i]; 
     // tra ve mot tham chieu toi phan tu thu i 
 } 
     // ham main de goi phan dinh nghia ham tren. 
 int main () 
 { 
     cout << "Gia tri truoc khi thay doi:" << endl; 
     for ( int i = 0; i < 5; i++ ) 
     { 
         cout << "mang[" << i << "] = "; 
         cout << mang[i] << endl; 
         
     } 
     tlGiaTri(1) = 12.44; 
     // thay doi phan tu thu 2 
     tlGiaTri(3) = 25.0; 
     // thay doi phan tu thu 4 
     cout << "Gia tri sau khi thay doi:" << endl; 
     for ( int i = 0; i < 5; i++ ) 
     { 
         cout << "mang[" << i << "] = "; 
         cout << mang[i] << endl; 
         
     } 
     return 0; 
     
 }

Chạy chương trình C++ trên sẽ cho kết quả như hình sau:

Trả về giá trị bởi tham chiếu trong C++

Khi trả về một tham chiếu, bạn nên cẩn thận rằng đối tượng đang được tham chiếu là không ra khỏi phạm vi. Vì thế, nó là không hợp lệ để trả về một tham chiếu tới biến cục bộ. Nhưng bạn có thể trả về một tham chiếu trên một biến tĩnh (static).

int& func() 
 { 
     int q; 
     //! return q; 
     // Lenh dang nay se cho mot Compile time error static 
     int x; 
     return x; 
     // An toan, x ben ngoai pham vi nay 
 }

Theo Tutorialspoint

Bài trước: Trả về con trỏ từ hàm trong C++

Bài tiếp: Date và Time trong C++

Thứ Sáu, 10/04/2020 11:11
3,73 👨 5.640
0 Bình luận
Sắp xếp theo