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

3
52970
This entry is part 65 of 69 in the series Học C Không Khó
81 / 100

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:

Sáng lập cộng đồng Lập Trình Không Khó với mong muốn giúp đỡ các bạn trẻ trên con đường trở thành những lập trình viên tương lai. Tất cả những gì tôi viết ra đây chỉ đơn giản là sở thích ghi lại các kiến thức mà tôi tích lũy được.
Subscribe
Notify of
guest
3 Bình luận
Inline Feedbacks
View all comments