Con Trỏ Mảng 2 Chiều Trong C

     

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

Bạn đang xem: Con trỏ mảng 2 chiều trong c

Cấp phát rượu cồn mảng 2 chiều

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

Cấp phát rượu cồn mảng 2 chiều sử dụng con trỏ cấp 2

Cấp phạt dùng bé trỏ cấp cho 2

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

Số dấu * diễn đạt cấp của nhỏ trỏ, cùng thường bọn họ 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 những mảng 1 chiều. Như vậy, để cấp phép mảng 2 chiều thì ta chỉ cần cấp phát các mảng một chiều là được.

Xem thêm: Hướng Dẫn Cách Nấu Ốc Xào Măng Thanh Hóa, Ship Đồ Ăn Thanh Hóa


0
1
2
3
4
5
6
a = (int **)malloc(dong * sizeof(int *));
for (i = 0; i dong; i++)

a = (int *)malloc(cot * sizeof(int));

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

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


0
1
2
3
4
5
6
for (i = 0; i dong; i++)

free(a);

free(a)

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


0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include
#include
void NhapMaTran(int **a, int dong, int cot)

int i, j;
for (i = 0; i dong; i++)
for (j = 0; j cot; j++)

printf("a<%d><%d> = ", i, j);
scanf("%d", &a);


void XuatMaTran(int **a, int dong, int cot)

int i, j;
for (i = 0; i dong; i++)

for (j = 0; j cot; j++)
printf("%5d", a);
printf(" ");


int main()

int **a = NULL, dong, cot;
int i;
printf("Nhap vao so dong = ");
scanf("%d", &dong);
printf("Nhap vao so cot = ");
scanf("%d", &cot);
// cấp phát mảng các con trỏ cấp 1
a = (int **)malloc(dong * sizeof(int *));
for (i = 0; i dong; i++)

// cấp phát cho từng bé trỏ cung cấp 1
a = (int *)malloc(cot * sizeof(int));

NhapMaTran(a, dong, cot);
XuatMaTran(a, dong, cot);
// giải tỏa từng hàng
for (i = 0; i dong; i++)

free(a);

// giai phong nhỏ trỏ thống trị các dòng
free(a);
return 0;

Kết trái chạy:


0
1
2
3
4
5
6
7
8
9
Nhap vao so dong = 2
Nhap vao so cot = 2
a<0><0> = 1
a<0><1> = 2
a<1><0> = 3
a<1><1> = 4
12
34

Dùng mảng 1 chiều để trình diễn mảng 2 chiều

Để làm cho được câu hỏi này, ta mang sử bắt buộc lưu một mảng 2 chiều có form size m x n. Lúc ấy ta cấp phép 1 mảng 1 chiều a bao gồm m x n ô nhớ.

Xem thêm: Bài Tập Trắc Nghiệm Ngữ Pháp Tiếng Anh Có Đáp Án ), Bài Tập Trắc Nghiệm Ngữ Pháp Online

Khi đó, thành phần ở sản phẩm i, cột j => tạm gọi là a tương ứng là thành phần a.


0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include
#include
int main()

int *a = NULL, dong, cot;
int i;
printf("Nhap vao so dong = ");
scanf("%d", &dong);
printf("Nhap vao so cot = ");
scanf("%d", &cot);
// cấp cho phát
a = (int *)malloc(dong * cot * sizeof(int));
// Nhập ma trận
for(int i = 0; i dong; i++)
for(int j = 0; j cot; j++)
printf("a<%d><>%d = ", i, j);
scanf("%d", (a + i*dong + j));


// Xuất ma trận
for(int i = 0; i dong; i++)
for(int j = 0; j cot; j++)
printf("%d ", *(a + i*dong + j));

printf(" ");

// giải phóng
free(a);
return 0;

Kết quả chạy:


0
1
2
3
4
5
6
7
8
9
Nhap vao so dong = 2
Nhap vao so cot = 2
a<0><>0 = 1
a<0><>1 = 2
a<1><>0 = 3
a<1><>1 = 4
1 2
3 4

Như vậy tôi vừa cùng chúng ta học cách cấp phát động mảng 2 chiều trong C theo 2 phương pháp khác nhau. Xin xin chào và chúc chúng ta học tập tốt!

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


TAGS
Facebook
Twitter
Pinterest
WhatsApp
*
*

Giáo trình chuyên môn lập trình C – Phạm Văn Ất


*

<Đồ án> gợi ý code trò chơi rắn săn mồi vào C


*

Bài 70. Đọc ghi file trong C


*

Bài 69. Chương trình làm chủ sinh viên áp dụng struct


Bài 68. Struct trong C


Bài 66. Cung cấp phát bộ lưu trữ động vào C


Subscribe
Connect with
Notify of
new follow-up comments
Label
Name*
Email*
Website
Connect with
Label
Name*
Email*
Website
3 comment
Inline Feedbacks
View all comments
Load More Comments
Khóa học tập miễn phí

Blog chia sẻ kiến thức thiết kế của Hiếu, xây dựng xã hội những người học lập trình. Cho đi kiến thức và kỹ năng mình gồm là biện pháp học tập kết quả nhất


Báo lỗi / tương tác / hợp tác ký kết / Quảng cáo
Blogger
Facebook
Linkedin
Discord
Youtube

BÀI VIẾT HAY


Bài 1. Giới thiệu khóa học “Học C Bá Đạo”


1000 bài bác tập lập trình C/C++ có lời giải của thầy Khang


Kiểm tra số nguyên tố thực hiện C/C++ và Java


CHUYÊN MỤC HAY


- BẠN BÈ và ĐỐI TÁC -

---

© 2018-2020. Bản quyền ở trong Lập Trình không Khó. Privacy và Terms


3
0
Would love your thoughts, please comment.x
()
x
| Reply
Insert
NHIỀU BÀI VIẾT HƠN

Bài 39. Cách tính giai vượt trong C/C++


Bài 60. đưa kiểu int sang trọng string trong C/C++