Cấp phát động cho mảng 2 chiều trên c

      19

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

Bạn đang xem: Cấp phát động cho mảng 2 chiều trên c

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

Ở bài bác này mình vẫn đề cập 2 phía tiếp cận, bao gồm:

Cấp phát đụng mảng 2 chiều sử dụng bé trỏ cấp 2

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

Mình giới thiệu về nhỏ trỏ đa cung cấp trước. Bạn hiểu đúng bản chất con trỏ được dùng làm trỏ tới những biến thông thường, thì con trỏ cung cấp 2 dùng để làm trỏ tới con trỏ cấp cho 1. Có nghĩa là khi bạn muốn thay đổi giá trị của bé trỏ cấp cho 1 thì ta dùng con trỏ cung cấp 2.

Số dấu * biểu đạt cấp của con trỏ, với thường họ chỉ dừng lại ở bé trỏ cấp 2.

Theo khái niệm, mảng 2d là tập hợp của các 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 1 chiều là được.


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 động so_hang bé trỏ một chiều – 1 con trỏ một chiều tương ứng là 1 trong 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ép động mang đến mảng 2d có kích cỡ so_hang x so_cot.

Xem thêm: Giọng Ca Gốc Á Celine Tam Là Ai ? Tiểu Céline Dion Của Hong Kong

Và khi giải tỏa mảng, ta đề nghị giải phóng từng sản phẩm 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ép mảng những con trỏ cấp 1
a = (int **)malloc(dong * sizeof(int *));
for (i = 0; i dong; i++)

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

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

free(a);

// giai phong bé 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 một chiều để trình diễn mảng 2 chiều

Để có tác dụng được bài toán này, ta giả sử yêu cầu 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 a tất cả m x n ô nhớ.

Khi đó, thành phần ở hàng i, cột j => tạm call là a khớp ứ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 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
1 2
3 4

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

Theo dõi thiết kế không cực nhọc 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> chỉ dẫn code game rắn săn mồi vào C


*

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


*

Bài 69. Chương trình cai quản sinh viên sử dụng struct


Bài 68. Struct trong C


Bài 66. Cấp phát bộ nhớ động trong C


Subscribe
Connect with
Notify of
new follow-up comments
Label
Name*
Email*
Website
Connect with
Label
Name*
Email*
Website
3 bình luận
Inline Feedbacks
View all comments
Load More Comments
Khóa học miễn phí
Ưu đãi new nhất

Mã giảm ngay & tặng kèm khóa học lập...


Khóa học lập trình Java cơ phiên bản miễn phí


Học lập trình sẵn online với mức chi phí ưu đãi


Lập trình WinForm cùng với C# qua 10 ứng dụng


Học HTML5, CSS3, Bootstrap 4 và cắt Web từ file PSD


Học Python trường đoản cú Zero – Hero


Khóa học lập trình android toàn tập


Học lập trình C/C++ TỪ A – Z


heya.com.vn chia sẻ kiến thức lập trình sẵn của Hiếu, xây dựng cộng đồng những tín đồ học lập trình. đến đi kỹ năng mình bao gồm là cách học tập tác dụng nhất


Báo lỗi / contact / bắt tay hợp tác / Quảng cáo
heya.com.vnger
Discord
Facebook
Linkedin
Youtube

BÀI VIẾT HAY


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


Bài 1. Trình làng khóa học “Học C Bá Đạo”


Kiểm tra số nguyên tố áp dụng C/C++ với Java


CHUYÊN MỤC HAY


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

---

© 2018-2020. Phiên bản quyền nằm trong Lập Trình không Khó. Privacy & Terms


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

Bài 31. Đảo ngược số áp dụng hàm trong C


Bài 43. Tra cứu số bé dại nhất, lớn nhất trong mảng


Hot live tỷ số bóng đá hôm nay