Cấp phát động mảng 2 chiều trong C

Bài 67. Cấp phát động mảng 2 chiều trong C

This entry is part 65 of 69 in the series Học C Không Khó

Hôm nay Lập trình không khó sẽ cùng bạn thực hiện việc cấp phát động mảng 2 chiều trong C nhé. Mảng 2 chiều là 1 cấu trúc dữ liệu rất là quen thuộc đối với chúng ta. Ở bài trước mình đã có hướng dẫn cấp phát động mảng 1 chiều trong C rồi. Một điều đặc biệt lưu ý khi làm việc với con trỏ là chương trình của ta sẽ không tự giải phóng bộ nhớ cho bạn.

Cấp phát động mảng 2 chiều

Ở bài này mình sẽ đề cập 2 hướng tiếp cận, bao gồm:

  • Cấp phát động mảng 2 chiều sử dụng con trỏ cấp 2
  • Dùng mảng 1 chiều để lưu mảng 2 chiều

Cấp phát dùng con trỏ cấp 2

Mình nói qua về con trỏ đa cấp trước. Bạn hiểu rằng con trỏ được dùng để trỏ tới các biến thông thường, thì con trỏ cấp 2 dùng để trỏ tới con trỏ cấp 1. Tức là khi bạn muốn thay đổi giá trị của con trỏ cấp 1 thì ta dùng con trỏ cấp 2.

Số dấu * thể hiện cấp của con trỏ, và thường chúng ta chỉ dừng lại ở con trỏ cấp 2.

Theo khái niệm, mảng 2 chiều là tập hợp của các mảng 1 chiều. Như vậy, để cấp phát mảng 2 chiều thì ta chỉ cần cấp phát nhiều mảng 1 chiều là được.

Với code trên, ta đang thực hiện cấp phát động so_hang con trỏ 1 chiều – 1 con trỏ 1 chiều tương ứng là 1 hàng, với mỗi con trỏ 1 chiều ta cấp phát so_cot ô nhớ tương đương số lượng phần tử của mỗi hàng. Tức là ta đang cấp phát động cho mảng 2 chiều có kích thước so_hang x so_cot.

Và khi giải phóng mảng, ta phải giải phóng từng hàng rồi mới giải phóng con trỏ cấp 2 nhé.

Dưới đây là code ví dụ:

Kết quả chạy:

Dùng mảng 1 chiều để biểu diễn mảng 2 chiều

Để làm được việc này, ta giả sử cần lưu một mảng 2 chiều có kích thước m x n. Khi đó ta cấp phát 1 mảng 1 chiều am x n ô nhớ.

Khi đó, phần tử ở hàng i, cột j => tạm gọi là a[i][j] tương ứng là phần tử a[i*n + j].

Kết quả chạy:

Như vậy mình vừa cùng các bạn học cách cấp phát động mảng 2 chiều trong C theo 2 cách khác nhau. Xin chào và chúc các bạn học tập tốt!

Theo dõi lập trình không khó tại:

Similar Posts

Subscribe
Notify of
guest
3 Bình luận
Inline Feedbacks
View all comments