Con trỏ có thể nhận tham số null trong khi tham chiếu không thể. Chỉ dùng con trỏ nếu muốn truyền "không đối tượng".
Truyền bằng con trỏ tường minh cho phép thấy rõ tại điểm gọi (call site) đối tượng được truyền bằng tham chiếu hay giá trị.
Dưới đây là ví dụ đơn giản về truyền bằng con trỏ và truyền bằng tham chiếu:
Truyền bằng con trỏ
Ví dụ
#include <iostream>
using namespace std;
void swap(int* a, int* b) {
int c = *a;
*a = *b;
*b = c;
}
int main() {
int m = 7, n = 6;
cout << "Before Swap\n";
cout << "m = " << m << " n = " << n << "\n";
swap(&m, &n);
cout << "After Swap by pass by pointer\n";
cout << "m = " << m << " n = " << n << "\n";
}
Kết quả
Before Swap m = 7 n = 6 After Swap by pass by pointer m = 6 n = 7
Truyền bằng tham chiếu
Ví dụ
#include <iostream>
using namespace std;
void swap(int& a, int& b) {
int c = a;
a = b;
b = c;
}
int main() {
int m = 7, n = 6;
cout << "Before Swap\n";
cout << "m = " << m << " n = " << n << "\n";
swap(m, n);
cout << "After Swap by pass by reference\n";
cout << "m = " << m << " n = " << n << "\n";
}
Kết quả
Before Swap m = 7 n = 6 After Swap by pass by reference m = 6 n = 7