Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

จะคูณเมทริกซ์สองตัวโดยใช้พอยน์เตอร์ใน C ได้อย่างไร?


ตัวชี้เป็นตัวแปรที่เก็บที่อยู่ของตัวแปรอื่น

คุณสมบัติของพอยน์เตอร์

  • ตัวชี้ช่วยประหยัดพื้นที่หน่วยความจำ
  • เวลาดำเนินการของตัวชี้เร็วขึ้นเนื่องจากการเข้าถึงตำแหน่งหน่วยความจำโดยตรง
  • ด้วยความช่วยเหลือของพอยน์เตอร์ หน่วยความจำจะเข้าถึงได้อย่างมีประสิทธิภาพ เช่น หน่วยความจำจะได้รับการจัดสรรและจัดสรรคืนแบบไดนามิก
  • พอยน์เตอร์ใช้กับโครงสร้างข้อมูล

การประกาศ การเริ่มต้น และการเข้าถึงตัวชี้

พิจารณาข้อความต่อไปนี้ −

int qty = 179;

ในหน่วยความจำ ตัวแปรสามารถแสดงได้ดังแสดงด้านล่าง -

จะคูณเมทริกซ์สองตัวโดยใช้พอยน์เตอร์ใน C ได้อย่างไร?

ประกาศ

การประกาศตัวชี้สามารถทำได้ดังแสดงด้านล่าง -

Int *p;

หมายความว่า 'p' เป็นตัวแปรตัวชี้ซึ่งเก็บที่อยู่ของตัวแปรจำนวนเต็มอื่นไว้

การเริ่มต้น

ตัวดำเนินการที่อยู่ (&) ใช้เพื่อเริ่มต้นตัวแปรตัวชี้

ตัวอย่างเช่น

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

การเข้าถึงตัวแปรผ่านตัวชี้

ในการเข้าถึงค่าของตัวแปร จะใช้ตัวดำเนินการทางอ้อม (*)

ตัวอย่าง

ต่อไปนี้เป็นโปรแกรม C เพื่อคูณเมทริกซ์ทั้งสองโดยใช้พอยน์เตอร์ -

#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;
      }
   }
}

ผลลัพธ์

เมื่อโปรแกรมข้างต้นทำงาน มันจะสร้างผลลัพธ์ต่อไปนี้ -

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