Bài 67

      47
Mục đích của tôi là cấp phát động cho một biến con trỏ 2 chiều, sau đó dùng biến con trỏ đó để nhập và in ra màn hình một ma trận có m dòng và n cột nhập từ bàn phím. Các anh chị tìm và sửa giúp lỗi trong đoạn code sau, tôi ngồi cả ngày không biết phải sửa như thế nào cho hết lỗi (khi in ra thì chỉ in toàn giá trị 0, và phần giải phóng bộ nhớ cũng có vấn đề)

Bạn đang xem: Bài 67

#include "stdio.h"#include "conio.h"#include "stdlib.h"void main(){ int m,n, i,j; float **a, *mangcon; clrscr(); printf("\n Nhap so hang m = "); scanf("%d",&m); printf("\n Nhap so cot n = "); scanf("%d",&n);a = (float **)malloc(m*sizeof(float *)); mangcon= (float *)malloc(m*n*sizeof(float)); for(i=0;i
Trả lời cùng với trích dẫn
*

*
Thành viên mới
*

1. free mang con đâu ? free như thế kia dài dòng mà lại ko logic . khiến cho thao tác xử lý lề mề,.....2.
sizeof(float*) hay chính xác là sizeof(...*) của 1 con trỏ gần bằng 2byte.=> cấp phát 2m byte cho a.theo cú pháp này thì a là 1 mảng trong đó các thành phần là những con trỏ.các thành phần này liên tục. mỗi thành phần là 1 con trỏ và ta sẽ cho nó trỏ đến vùng nhớ khác.*(a+i*n+j) tọa độ chính xác phải là thế này :từng thành phần là 1 con trỏ trỏ đến vùng nhớ mới.vậy thì ta phải lấy được cái địa chỉ hay chính là giá trị nằm trong con từng con trỏ đó :
ồ đây chính là địa chỉ chính xác của thằng thành phần trong mảng 2 chiều của bạn . + thêm độ lệch j thôivậy địa chỉ của thằng a là :

Xem thêm: Trung Quốc Chế Tạo Kính Nhìn Xuyên Thấu Quần Áo, Kính Áp Tròng Nhìn Xuyên Đồ Vật

#include"stdio.h"#include"conio.h"#include"stdlib.h"voidmain(){intm,n,i,j;float**a,*mangcon;clrscr();printf("\nNhapsohangm=");scanf("%d",&m);printf("\nNhapsocotn=");scanf("%d",&n);a=(float**)malloc(m*sizeof(float*));mangcon=(float*)malloc(m*n*sizeof(float));for(i=0;im;i++)a=mangcon+i*n;for(i=0;im;i++)for(j=0;jn;j++){printf("\na<%d><%d>=",i+1,j+1);scanf("%f",(*(a+i)+j));}for(i=0;im;i++){for(j=0;jn;j++)printf("%5.2f",*(*(a+i)+j));//l?nhnàych?inramànhình0.00printf("\n");}free(a);free(mangcon);getch();}
*

Trả lời cùng với trích dẫn
Do bây giờ tôi chỉ mới học nhập môn lập trình nên suy nghĩ còn rất chậm, lúc tìm hiểu về con trỏ hai chiều lại có quá nhiều vấn đề phức tạp đối với tôi. Cho nên trong một lúc bị rối và không thể tìm được cho mình lời giải thích hợp, cho dù cũng vấn đề đó sau khi đọc bài viết của anh xong tôi lại thấy đơn giản. Thành thật tôi xin cảm ơn anh rất nhiều.
1. free mang con đâu ? free như thế kia dài dòng mà lại ko logic . khiến cho thao tác xử lý lề mề,.....
Khi code tôi cứ bị ám trong đầu free(a) khi i chạy từ 0 tới n tức là free m mảng con, vì a trỏ đến mangcon (tôi nghĩ thế)
Không hiểu tại sao tôi dùng phiên bản Borlan C++ 5.02, khi có khai báo int i trong vòng for thứ nhất thì trong mỗi vòng for tiếp theo tôi có khai báo thêm i nữa cũng không bị lỗi, một điều khác nữa là khi tô đen một hàm nào đó rồi bấm Ctr+F1 cũng không show ra được bảng hướng dẫn về hàm đó(trong Turbo C thì có), chỉ có phần help của window nên tôi không tham khảo được gì cả. Nếu anh biết nguyên nhân tại sao thì xin chỉ tôi khắc phục.
567liveXoiLac TV