01/10/2018, 01:18
Ý nghĩa kí hiệu ma trận trong C
Em có 1 hàm xuất ma trận:
void xuatMaTran(int(*a)[5], int m, int n)
{
int i, j;
for (i = 0;i < m;i++) {
for (j = 0;j < n;j++) {
printf("
a[%d][%d]: %d", i, j, *(*(a + i) + j));
}
}
}
int main() {
int a[2][5] = { 1,2,3,4,5,6,7,8,9,10 }, m = 2, n = 5;
xuatMaTran(a, m, n);
}
Khi gọi xuatMaTran(a,m,n);
thì nó sẽ truyền địa chỉ phần tử đầu tiên của ma trận vào hàm.
Vậy cho em hỏi int(*a)[5]
nghĩa là sao, tại sao khi em bỏ [5]
lại báo lỗi ?
Và tại sao em không thể dùng int**a
để thay thế cho int(*a)[5]
, mặc dù biết a trong hàm là con trỏ cấp 2?
Bài liên quan
Hiểu sơ sơ nó là vầy: int* là ứng với cấp 1 còn int*[5] là ứng với cấp 2 nên làm sao mà thay cho nhau được.
Tại vì cách tìm phần tử mảng của hai kiểu khác xa nhau rất nhiều.
Mình đã giải đáp thắc mắc cho Bạn này xong bên facebook. Bạn nào muốn tìm hiểu thì có thể xem thêm ở đây: https://www.facebook.com/groups/hoclaptrinhsondeptrai/permalink/1416495498362241/
Closed Group