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?

rogp10 viết 03:21 ngày 01/10/2018
  1. 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.

  2. 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.

Từ Gia Lộc viết 03:23 ngày 01/10/2018

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/

rogp10 viết 03:23 ngày 01/10/2018

Closed Group

Bài liên quan
0