void CapPhat (int **&a,int &rows,int &columns);
Nếu truyền tham chiếu cho hàng và cột thì cũng được, ref hiệu quả hơn chỗ là nó không tạo copy cho biến đó, nhưng nếu không có ý định chỉnh sữa hàng và cột thì truyền const int& row...
Cái này đọc từ phải qua, tham chiếu tới con trỏ tới con trỏ, vấn đề là trả về con trỏ sẽ tiện hơn, không cần tham chiếu làm gì, nếu truyền mãng 2 chiều hay 1 chiều vào : thì bản thân đã là truyền con trỏ rồi. Ví dụ
[code=cpp] func(int A[]); <-> func(int *A);
func(int A[][col] <-> func(int **A);
Trả về con trỏ chỗ đó là ok, chỉ nhớ giải phóng vùng nhớ tránh memory leak là được. Nếu trong C++ thì tui sẽ dùng shared_ptr or scoped_ptr, nhưng mấy cái này mới học thì chẳng cần quan tâm. Tập thao tác tay cho quen để hiểu sâu hơn về con trỏ.
-Tham chiếu thì hiểu thế này :
Code:
int value;
int &ref = value;
ref = 5; //tuơng đuơng với value = 5;
ref chẳng qua là cái tên thứ 2 của value thôi, khi tui sữa ref thì value cũng thay đổi theo, tui nghĩ cái này cậu hiểu.
-> vậy khi tui truyền tham chiếu vào hàm thay chẳng qua tui đưa cái nick name vào hàm để tui thay đổi giá trị của nói thôi.
->
void func(int& ref)
{
ref = 5; //value cũng = 5;
}
Vậy func(int** &a)
thì chỉ là tham chiếu tới con trỏ_tới_con_trỏ để thay đổi nội dung của con_trỏ_tới_con_trỏ, làm thế này thì cũng được nhưng nó không rõ ràng. Vì sa o ? Vì bản chất con trỏ cũng thay đổi được nội dung mà nó trỏ tới, vậy thì con trỏ cũng mang ý nghĩa như ref :
int value;
int* ptr = &value;
*ptr = 5; //value cũng bằng 5, chỉ khác syntax màu mè thêm tí thôi.
Vậy chỉ cần pass int** là đủ, cái tham chiếu đó là ko rõ ràng.