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:
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:
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:
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++
Bạn nên đọc
-
Vòng lặp trong C++
-
Nạp chồng toán tử truy cập thành viên lớp (->) trong C++
-
Bài tập C++ có lời giải (code mẫu)
-
Bài tập C++ có giải (code mẫu) về biến, kiểu dữ liệu và toán tử
-
Nạp chồng toán tử gọi hàm () trong C++
-
Chuỗi (String) trong C/C++
-
Kiểu dữ liệu trong C/C++
-
Đọc/ghi File trong C++ | fstream trong C++
-
Nạp chồng toán tử gán trong C++
Cũ vẫn chất
-
Làm thế nào để kiểm tra nhiệt độ CPU của máy tính?
Hôm qua -
Tổng hợp câu hỏi Nhanh như chớp mùa 2
Hôm qua -
Cách tạo brush tùy chỉnh trong Photoshop
Hôm qua -
Tổng hợp cách tạo mật khẩu mạnh và quản lý mật khẩu an toàn nhất
Hôm qua -
Căn bậc 2, cách tính căn bậc 2
Hôm qua -
Cách đổi công cụ tìm kiếm trên Safari
Hôm qua -
Hướng dẫn cách chơi, lên đồ Natalya mùa S1 2023
Hôm qua -
Khóa ngoại Foreign Key trong SQL Server
Hôm qua 5 -
Cách dọn dẹp và khôi phục không gian trên ổ C Windows
Hôm qua -
Hướng dẫn chơi Rung Cây vàng Trúng Cây vàng trên My Viettel
Hôm qua