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

การคูณเมทริกซ์สองตัวด้วยพอยน์เตอร์ใน C

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

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

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

พิจารณาคำสั่ง:

int qty = 179;

ในหน่วยความจำ ตัวแปรแสดงดังรูป (รูปภาพไม่ได้รวม)

การประกาศ

int *p;

หมายถึง 'p' เป็นตัวแปรพอยน์เตอร์เก็บที่อยู่ของตัวแปร integer อื่น

การเริ่มต้น

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

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