如何在 C 语言中使用指针来乘以两个矩阵?
指针是一个存储另一个变量地址的变量。
指针的特性
- 指针节省内存空间。
- 由于可以直接访问内存位置,因此指针的执行时间更快。
- 借助指针,可以有效地访问内存,即动态分配和释放内存。
- 指针用于数据结构。
指针的声明、初始化和访问
考虑以下语句:
int qty = 179;
在内存中,变量可以表示如下:
声明
声明指针可以如下所示:
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
", ROW, COL); matrixInput(mat1); printf("Enter elements in second matrix of size %dx%d
", ROW, COL); matrixInput(mat2); matrixMultiply(mat1, mat2, product); printf("Product of both matrices is :
"); 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("
"); } } 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
广告