Tham chiếu biến và tham chiếu con trỏ?

Mình vẫn chưa hiểu lắm về phần tham chiếu như sau:

void swap(int *&a,int *&b)
{
	int temp = *a;
	*a=*b;
	*b=temp;
}
void swap(int &a,int &b)
{
	int temp = a;
	a=b;
	b=temp;
}

Ai giải thích giùm mình đc k ạ?
2 cách ghi khác nhau và cùng thực hiện chức năng giống nhau, vậy thì cái tham chiếu con trỏ kia có tác dụng gì khác k?
Thanks

Tham biến qua con trỏ là kiểu cũ rồi :slight_smile: truyền qua tham chiếu thì cú pháp sẽ gọn hơn, thay vì swap(&a, &b);.

2 Likes

cái đầu là swap địa chỉ 2 con trỏ ấy bạn, con trỏ a nó sẽ chứa địa chỉ vùng nhớ b, còn b thì chứa địa chỉ a, cách 2 thì dùng tham chiếu giống như bạn tạo 2 biến nhưng có 1 vùng nhớ, (đơn giản là tham chiếu sẽ làm thay đổi nội dung của tham số truyền vào, nên tham chiếu đến con trỏ thay đổi nội dung con trỏ)

1 Like

Cảm ơn 2 bạn nhé. Mình hiểu r ạ

Code đầu là tạp nham,
Để mình giải thích kỹ hơn tí
Ngày xưa ngôn ngữ C chính thống không có pass tham số kiểu ref
Nên muốn truyền tham số dạng ref phải truyền con trỏ
Code

void swap(int *a, int *b)
{
 .....
}

Giả sử có int x=5, y=7;
Gọi swap(&x, &y)

Sau này ngôn ngữ có ngôn ngữ C++
Mới có dụ pass ref variable như cách 2

void swap(int& a, int& b)
{
...
}

Thì cách viết nào cũng đc, quan trọng mình phải hiểu

2 Likes

Oh, cảm ơn b nhiều. Tại mình thấy nhiều cách viết đâm ra hơi lưỡng lự k biết mỗi kiểu có tác dụng gì.
=))

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?