Mảng 2 chiều trong c
Một mảng nhị chiều là một mảng đựng nhiều mảng một chiều, nhiều khi mảng hai chiều còn được ngầm gọi như một bảng bao hàm các mặt hàng và các cột. Mảng hai phía còn thường xuyên được call với cái tên là ma trận có form size M x N (M là số hàng, N là số cột).
Bạn đang xem: Mảng 2 chiều trong c

Truy cập vào thành phần trong mảng một chiều là việc truy cập vào hàng sản phẩm i cột thiết bị j gồm trong mảng. Lấy một ví dụ mảng a<1><3> (nghĩa là: i = 1, j = 3)
Ví dụ tiếp sau đây tôi gồm a là mảng 2 chiều (hay nói một cách khác là ma trận) có kích cỡ 3 x 3 như sau:
#include int main() //khai bao mang 2 chieu a gom 3 x 3 phan tu int a<3><3> = 1,2,3, 4,5,6, 7,8,9 ;Chúng ta rất có thể tưởng tượng mảng hai chiều trên như 1 bảng như sau:

Như nghỉ ngơi trên ta vẫn thường gọi mảng có các hàng và các cột, mặc dù nhiên bộ nhớ lưu trữ của máy tính xách tay là con đường tính và không có hàng với cột. Vì tại sao đó buộc phải các phần tử của mảng 2 chiều thực ra được tàng trữ theo một hàng với được gom đội lại theo những cột bao gồm trong hàng, xem hình minh họa dưới đây để nắm rõ hơn:

Dòng trên cùng là số lượng các hàng, vì bọn họ có mảng 2 chiều kích thước 3 x 3 nên có 3 hàng (3 row). Trong mỗi hàng được gom team lại 3 phần tử tương ứng cùng với 3 cột.
Dòng ở giữa là giá trị của mỗi thành phần ở hàng đồ vật i cột vật dụng j, ví dụ tại a<1><3> = 3 (nghĩa là i = 1, j = 3) hay a<2><1> = 4 (nghĩa là i = 2, j = 1).
Dòng sau cuối là add của mỗi thành phần ở hàng máy i cột máy j, ví dụ như a<1><1> lưu trữ tại showroom 1000, a<1><2> lưu trữ tại add 1004, a<1><3> tàng trữ tại showroom 1008… với a<3><3> lưu trữ tại add 1032
Vì đấy là mảng bao gồm kiểu int cùng có kích cỡ 4 byte đề xuất mỗi địa chỉ liền kề phương pháp nhau 4 đơn vị chức năng (4 byte).
Chú ý: Địa chỉ ô lưu giữ trên chỉ là ví dụ nhằm ta dễ dàng hình dung.
2.Sử dụng bé trỏ để làm việc với các bộ phận trong mảng nhì chiều2.1 Địa chỉ ô ghi nhớ của các bộ phận mảng nhị chiều
Mảng hai chiều rất có thể được có mang như là một trong những con trỏ trỏ tới một tổ các mảng một chiều liên tiếp nhau.
Ở mảng một chiều ta biết rằng tên của mảng chứa showroom của mảng đó, hay thành phần a<0> (phần tử đầu tiên) cũng chứa add của mảng đó.
Xem thêm: Hướng Dẫn Cách Làm Cơm Chiên Tỏi Trứng Giòn Ngon Nhất Tại Nhà
Trong trường hợp của mảng 2 chiều, thành phần đầu tiên vào mảng 2d lại chính là một mảng một chiều và nếu như mảng hai phía a có size (3 x 3) cùng có địa chỉ tại thành phần đầu tiên (a + 0) là 1000 thì add của bộ phận thứ nhị (a+1) là 1012 , địa chỉ cửa hàng tại bộ phận thứ cha (a + 2) là 1024. Coi phần red color ở hình bên dưới đây:

Như vậy tất cả nghĩa là:
(a + 0) trỏ đến mảng sản phẩm 0(a + 1) trỏ đến mảng sản phẩm công nghệ 1(a + 2) trỏ mang đến mảng máy 2
Tóm lại, ta rất có thể hiểu (a + i) trỏ mang đến mảng một chiều đồ vật i trong mảng 2 chiều.
Tuy nhiên, vào mảng vật dụng i lại mãi mãi thêm những giá trị ở trong những số đó (vì mảng thiết bị i này là mảng 1 chiều). Lấy ví dụ (a + 0) thì đang là:

Hay (a + 1) thì sẽ là:

Hoặc (a + 2) thì sẽ là:

Chú ý: Địa chỉ ô ghi nhớ trên chỉ nên ví dụ để ta dễ dàng hình dung.
2.2 thực hiện con trỏ nhằm truy cập showroom và giá trị của bộ phận mảng nhị chiều
Bạn đọc hãy cùng tôi tham khảo hai ví dụ tiếp sau đây để đúc kết công thức bao quát cho câu hỏi lấy add và quý hiếm của mảng hai phía a
Ví dụ 1, giả sử tôi ý muốn lấy địa chỉ cửa hàng của a<0><0>, nghĩa là tôi truy cập vào mảng 1 chiều đầu tiên, và truy cập tiếp theo vào phần tử đầu tiên vào mảng đó. Xem hình minh họa bên dưới

Tôi sẽ áp dụng cú pháp: *(a + 0) + 0 nhằm lấy địa chỉ a<0><0>
#include int main() //khai bao với 2 chieu a gom 3 x 3 phan tu int a<3><3> = 1,2,3, 4,5,6, 7,8,9 ; //lay dia đưa ra a<0><0> bang *(a + 0) + 0 printf("Dia bỏ ra cua a<0><0> la: %x", *(a + 0) + 0);
Ví dụ thứ 2 tôi mong mỏi lấy showroom của a<2><1>, nghĩa là tôi truy vấn vào mảng 1 chiều thứ 2, với truy cập tiếp sau vào phần tử thứ một trong mảng đó.

Tôi sẽ áp dụng cú pháp: *(a + 2) + 1 để lấy địa chỉ cửa hàng a<2><1>
#include int main() //khai bao mang 2 chieu a gom 3 x 3 phan tu int a<3><3> = 1,2,3, 4,5,6, 7,8,9, ; //lay dia bỏ ra a<2><1> bang *(a + 2) + 1 printf("Dia chi cua a<2><1> la: %x", *(a + 2) + 1);
→ Qua hai ví dụ bên trên ta hoàn toàn có thể rút ra phương pháp cho add và quý giá của phần tử a
Để minh họa về bài toán lấy quý giá của họ cùng trở lại ví dụ 2, tôi sẽ lấy cực hiếm tại a<2><1> = 8

Theo bí quyết *(*(a+2) + 1)
#include int main() //khai bao có 2 chieu a gom 3 x 3 phan tu int a<3><3> = 1,2,3, 4,5,6, 7,8,9, ; //lay gia tri a<2><1> bang *(*(a+2) + 1) printf("Gia tri cua a<2><1> la: %d",*(*(a+2) + 1));
Tiếp theo ta sẽ vận dụng con trỏ để truy vấn vào add và quý giá của thành phần mảng a
Luôn ghi nhớ rằng, mảng nhì chiều thực chất cũng là mảng 1 chiều chứa nhiều bộ phận và mỗi thành phần trong kia lại là 1 mảng một chiều gồm các cột.
Xem thêm: Uống Nước Củ Sen Có Tác Dụng Gì, Công Dụng Của Củ Sen Trong Việc Chữa Bệnh
Vì rứa để thực hiện con trỏ lưu giữ trữ add của mảng 2 chiều đó ta yêu cầu một bé trỏ đến một mảng có kích thước bằng số cột của mảng 1 chiều.
Ví dụ sau đây tôi bao gồm mảng a<3><3> (có 3 sản phẩm 3 cột) yêu cầu tôi đã khai báo như sau:
#include int main() //khai bao với 2 chieu a gom 3 x 3 phan tu int a<3><3> = 1,2,3, 4,5,6, 7,8,9, ; //khoi tao bé tro p tro den 3 cot int (*p)<3>; //gan con tro phường bang có a phường = a;Giả sử tôi có mảng a<3><4> (3 sản phẩm 4 cột) tôi đã khai báo: int (*p)<4>;
→ bởi vậy ta tất cả công thức để hoàn toàn có thể gán bé trỏ mang đến mảng 2 chiều có form size a
Bây giờ, ta trả toàn hoàn toàn có thể sử dụng nhỏ trỏ để lấy giá trị và showroom của các phần tử trong mảng a bằng cách:
(p + i) để lấy ra showroom của các phần tử trong mảng hai chiều* ( * ( p. + i) + j ) để kéo ra giá trị của các bộ phận trong mảngVí dụ sau đây tôi sẽ áp dụng con trỏ (*p)<3> để mang giá trị và showroom của mảng a<3><3>
#include int main(){ //khai bao sở hữu 2 chieu a gom 3 x 3 phan tu int a<3><3> = 1,2,3, 4,5,6, 7,8,9, ; //khoi tao bé tro p int (*p)<3>; //gan nhỏ tro p bang có a p = a; //duyet cac hang trong với for(int i = 0; i
#include int main(){ //khai bao với 2 chieu a gom 3 x 3 phan tu int a<3><3> = 1,2,3, 4,5,6, 7,8,9, ; //khoi tao bé tro phường cho mang a<3><3> int (*p)<3>; //gan con tro phường bang sở hữu a p = a; printf("Cac phan tu trong với la so chan "); //duyet cac hang trong có for(int i = 0; i