Chào mọi người! Em đang tự học lập trình C, đến phần Mảng và Con Trỏ thì em có một số thắc mắc. Rất mong được mọi người giải đáp.
Đối với mảng 2 chiều Mang2c[ i ][ j ] và biến con trỏ ConTro
Có phải nếu ta thực hiện phép gán: ConTro=(int)Mang2c;
thì sau đó biến con trỏ ConTro sẽ quản lý các phần tử của mảng hai chiều Mang2c và hoạt động như một mảng một chiều đúng không ạ?
Theo giả thiết trên thì em viết đoạn code:
Nhập vào một mảng hai chiều và in ra màn hình theo cách truy cập Mảng. Sau đó cũng in ra màn hình mảng đó theo cách của Con trỏ, nhưng kết quả lại không được như mong đợi:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main() {
int *ConTro;
int Mang2c[20][20];
int i,j,n,m;
//n la so dong, m la so cot cua mang 2 chieu
printf("Nhap so dong: "); scanf("%d", &n);
printf("Nhap so cot : "); scanf("%d", &m);
for(i=0;i<n;i++)
for(j=0;j<m;j++) {
printf("Gia tri thu [%d][%d]=", i,j);
scanf("%d", &Mang2c[i][j]);
}
printf("\nTruy cap phan tu theo kieu Mang\n");
for(i=0;i<n;i++) {
for(j=0;j<m;j++) printf("%3d", Mang2c[i][j]);
printf("\n");
}
printf("\nTruy cap phan tu theo kieu Con tro\n");
ConTro=(int*)Mang2c;
for(i=0;i<m*n;i++) printf("%d ", ConTro[i]);
getch();
return 0;
}
Và đây là kết quả:
Sau khi sửa và thử rất nhiều lần, ví dụ:
+) Thay n*m (dòng 25) bằng một con số cụ thể thì kết quả lúc chính xác, lúc không (phụ thuộc n,m nhập vào)
+) Sửa Mang2c[20][20] thành Mang2c[4][5] và nhập n=4,m=5 thì kết quả chính xác. Tuy nhiên với n,m khác thì kết quả lại không chính xác nữa.
Trên đây là những thắc mắc của em, rất mong được mọi người giải đáp. Em xin cảm ơn!