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
-
Nạp chồng toán tử truy cập thành viên lớp (->) trong C++
-
Nạp chồng toán tử gọi hàm () trong C++
-
Modifier trong C/C++
-
Nạp chồng toán tử ++ và -- trong C++
-
Trừu tượng hóa dữ liệu trong C++
-
Chuỗi (String) trong C/C++
-
Vòng lặp trong C++
-
Bài tập C++ có giải (code mẫu) về biến, kiểu dữ liệu và toán tử
-
Mảng (Array) trong C/C++
Cũ vẫn chất
-
Cách viết số mũ trong Excel, viết chỉ số trên, chỉ số dưới trong Excel
Hôm qua -
Cách ẩn tin nhắn Telegram không cần xóa
Hôm qua -
Pantheon DTCL 7.5: Lên đồ, đội hình mạnh
Hôm qua -
Black Friday là gì? Black Friday 2023 vào ngày nào?
Hôm qua -
Cách vô hiệu hóa BitLocker trong Windows 10
Hôm qua -
Trải nghiệm Nothing Phone 1
Hôm qua 2 -
Cách khởi động và dừng các dịch vụ trong MS SQL Server
Hôm qua -
200+biệt danh cho người yêu hay và hài hước
Hôm qua 5 -
Cách cộng dặm Bông sen vàng
Hôm qua -
Khắc phục lỗi mạng WiFi không hiển thị trên Windows 10
Hôm qua