Có rất nhiều người sử dụng mảng 2 chiều mà chưa thực sự hiểu về nó.
Ví dụ: int array[m][n],
Tức là mảng có m phần tử, mỗi phần tử trong m phần tử có n phần tử con (chiếm 4 byte trong RAM).
Trong giáo trình của một thầy trường đh KHTN biên soạn, có 2 nhận xét như sau:
- "- Mảng 2 chiều là mảng mà mỗi phần tử là 1 mảng 1 chiều,
- Vị trí của các phần tử trong mảng 2 chiều được xác định thông qua chỉ số hàng và chỉ số cột"
Mỗi phần tử là 1 mảng 1 chiều rồi thì “vị trị các phần tử trong mảng 1 chiều được xác định …” chứ sao lại ví trí các phần tử trong mảng 2 chiều: Đây là cái SAI thứ NHẤT.
- " Mảng 2 chiều có m hàng và n cột thì phần tử a [ i ] [ j ] TƯƠNG ĐƯƠNG a [ i * n + j ]" : Đây là cái SAI thứ HAI
Điều này chỉ đúng cho con trỏ (int* pointer) nếu nó trỏ tới mảng 2 chiều thôi chứ dùng tên mảng là sai hoàn toàn. Vì:
- Tên mảng 2 chiều nó như một con trỏ, con trỏ này nó trỏ tới vùng nhớ có giá trị n4byte chứ không đơn giản trỏ tới vùng nhớ 4byte như con trỏ int thông thường.
Rất mong m.n đọc bài kĩ và cho ý kiến!