Computer >> Máy Tính >  >> Lập trình >> lập trình C

Làm thế nào để nhân hai ma trận bằng cách sử dụng con trỏ trong C?

Con trỏ là một biến lưu trữ địa chỉ của một biến khác.

Tính năng của con trỏ

  • Con trỏ tiết kiệm dung lượng bộ nhớ.
  • Thời gian thực thi của con trỏ nhanh hơn do có quyền truy cập trực tiếp vào vị trí bộ nhớ.
  • Với sự trợ giúp của con trỏ, bộ nhớ được truy cập hiệu quả, tức là bộ nhớ được cấp phát và phân bổ động.
  • Con trỏ được sử dụng với cấu trúc dữ liệu.

Khai báo, khởi chạy và truy cập con trỏ

Hãy xem xét tuyên bố sau -

int qty = 179;

Trong bộ nhớ, biến có thể được biểu diễn như hình dưới đây -

Làm thế nào để nhân hai ma trận bằng cách sử dụng con trỏ trong C?

Tuyên bố

Khai báo một con trỏ có thể được thực hiện như hình dưới đây -

Int *p;

Nó có nghĩa là ‘p’ là một biến con trỏ giữ địa chỉ của một biến số nguyên khác.

Khởi tạo

Toán tử địa chỉ (&) được sử dụng để khởi tạo một biến con trỏ.

Ví dụ:

int qty = 175;
int *p;
p= &qty;

Truy cập một biến thông qua con trỏ của nó

Để truy cập giá trị của biến, toán tử hướng (*) được sử dụng.

Ví dụ

Sau đây là chương trình C để nhân hai ma trận bằng cách sử dụng con trỏ -

#include <stdio.h>
#define ROW 3
#define COL 3
/* Function declarations */
void matrixInput(int mat[][COL]);
void matrixPrint(int mat[][COL]);
void matrixMultiply(int mat1[][COL], int mat2[][COL], int res[][COL]);
int main() {
   int mat1[ROW][COL];
   int mat2[ROW][COL];
   int product[ROW][COL];
   printf("Enter elements in first matrix of size %dx%d\n", ROW, COL);
   matrixInput(mat1);
   printf("Enter elements in second matrix of size %dx%d\n", ROW, COL);
   matrixInput(mat2);
   matrixMultiply(mat1, mat2, product);
   printf("Product of both matrices is : \n");
   matrixPrint(product);
   return 0;
}
void matrixInput(int mat[][COL]) {
   int row, col;
   for (row = 0; row < ROW; row++) {
      for (col = 0; col < COL; col++) {
         scanf("%d", (*(mat + row) + col));
      }
   }
}
void matrixPrint(int mat[][COL]) {
   int row, col;
   for (row = 0; row < ROW; row++) {
      for (col = 0; col < COL; col++) {
         printf("%d ", *(*(mat + row) + col));
      }
      printf("\n");
   }
}
void matrixMultiply(int mat1[][COL], int mat2[][COL], int res[][COL]) {
   int row, col, i;
   int sum;
   for (row = 0; row < ROW; row++) {
      for (col = 0; col < COL; col++) {
         sum = 0;
         for (i = 0; i < COL; i++) {
            sum += (*(*(mat1 + row) + i)) * (*(*(mat2 + i) + col));
         }
         *(*(res + row) + col) = sum;
      }
   }
}

Đầu ra

Khi chương trình trên được thực thi, nó tạo ra kết quả sau -

Enter elements in first matrix of size 3x3
2 3 1
2 5 6
2 6 8
Enter elements in second matrix of size 3x3
1 2 1
2 3 4
5 6 7
Product of both matrices is :
13 19 21
42 55 64
54 70 82