30/09/2018, 19:19

Con trỏ trong C

Cho em hỏi về con trỏ và mảng 2 chiều .
ví dụ bi giờ em có 1 đoạn code:

int arr[12][12];
int **ptr;

Bi giờ muốn cho con trỏ trỏ đến mảng này sau đó in ra mảng bằng con trỏ thì làm thế nào ạ?
Các anh chị có thể giải thích giúp em từng bước làm đó được không ạ?
và thêm 1 câu nữa là nếu cho con trỏ ptr trỏ đến mảng 2 chiều thì ví dụ như

 int arr[3][4];
int **ptr;

thì *ptr[4] tương đương với arr[4] phải ko ạ ?

Vesper Link viết 21:22 ngày 30/09/2018

Đối với mảng thì tên mảng chính là con trỏ trỏ tới phần tử đầu tiên của mảng rồi, bạn không cần phải khai báo biến con trỏ nữa.
Ví dụ: array sẽ trỏ đến array[0] (array = &array[0]) trong mảng array[20], => *array = array[0]. Tổng quát: array + i = &array[i], *(array + i) = array[i]. ( mình làm cái này để bạn sẽ dễ hiểu hơn ở phần array 2 chiều)
Với mảng 2 chiều A[n][m] thì bạn có thể coi nó như mảng một chiều n phần tử, mỗi phần tử là 1 mảng m phần tử nữa ( đau đầu nhỉ )

  • A là con trỏ tới hàng đầu tiên ( có n hàng ) trong mảng, tức là: A = &A[0]
    • A[0] là con trỏ trỏ tới phần tử đầu tiên A[0][0]: A[0] = &A[0][0] nên *A[0] = A[0][0] hay **A = A[0][0] (vì A trỏ tới A[0] như trên, đây là con trỏ trỏ tới một con trỏ nửa) ( đây là đoạn nhức đầu nhất )
    • A[0] + j là con trỏ trỏ tới phần tử A[0][j] hay A[0] + j = &A[0][j] nên *(A[0] + j) = A[0][j] hay *(*A + j) = A[0][j] => *(A[i] + j) = A[i][j] => Tổng quát: ((A + i) + j) = A[i][j]
      Chương trình thì bạn tự viết nhé
Vu Van Chung viết 21:31 ngày 30/09/2018

Hay đấy, đọc loạn hết cả lên!! Lâu nay chưa dùng mảng 2 chiều bao giờ giờ mới biết đó!

Bài liên quan
0