Thắc mắc về mảng động hai chiều trong C/C++

Mình mới tìm hiểu về lập trình ít lâu. Trong quá trình tìm hiểu về mảng động trong C++ và đọc sách Kỹ thuật Lập trình của thầy Trần Đan Thư thì gặp một đoạn code của hàm khai báo mảng động 2 chiều với số dòng xác định, như sau:

bool arr2D_alloc(T* a[], int m, int n){
   T* buffer = new T[m*n];
   if (buffer == NULL){
   	a[0] = NULL;
   	return false;
   }
   a[0] = buffer;
   for (int i = 1; i < m; i++){
   	buffer += n; a[i] = buffer;
   }
   return true;
}

Mình không hiểu về cách viết hàm lắm, mong mọi người có thể giải thích cho mình ạ! Cảm ơn mọi người!!!

a đã được cấp phát động m phần tử trước đó rồi à?

3 Likes
T* a[] // Tham số là mảng con trỏ.
T* buffer = new T[m*n]; // Khai báo và khởi tạo mảng 1 chiều m*n phần tử.
a[0] = buffer; // Trỏ phần tử đầu tiên đến đầu của buffer.
buffer += n; // di chuyển con trỏ buffer đến vị trí buffer  + n.( đây là vị trí bắt đầu của hàng tiếp theo).
a[i] = buffer; // và sau đó là trỏ phần tử thứ i của mảng a vào vị trí con trỏ hiện tại của buffer.

NOTE : Thực chất mảng 2 chiều là mảng 1 chiều.

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