使用指针将 2 个矩阵相乘
Multiplying 2 matrices using pointers
本文关键字:指针 更新时间:2023-10-16
所以我试图弄清楚如何使用指针将 2 个矩阵相乘。 它成功地以现在的方式工作,但我想学习指针的使用,而不是使用传统的数组访问方法。
这是我的代码:
#include <stdio.h>
#include<conio.h>
#include <stdlib.h>
#include <iostream>
/* Routines called. */
int loadMatrixFromFile(char *filename, int *data);
void showMatrix(int *data, int len);
int makeIdent(int matrixB[5][5], int length);
int matrixA[5][5];
int matrixB[5][5];
int matrixC[5][5];
void multiplyMatrices(int matrixA[5][5], int matrixB[5][5],int matrixC[5][5]);
int main(){
int len, data[1000];
len = loadMatrixFromFile("Numbers.txt", data);
showMatrix(data, len);
makeIdent(matrixB,len);
multiplyMatrices(matrixA, matrixB, matrixC);
}
int makeIdent(int matrixB[5][5], int len){
int i,j;
printf("Matrix B is: n");
for(i=0;i<5;i++){
for(j=0;j<5;j++){
if(i==j){
matrixB[i][j]=1;
printf("%d ",matrixB[i][j]);
}
else{
matrixB[i][j]=0;
printf("%d ",matrixB[i][j]);
}
}
printf("n");
}
return matrixB[i][j];
printf("n");
}
int loadMatrixFromFile(char *filename, int *data){
FILE *in;
int len;
int j;
in = fopen(filename, "r");
if (in == NULL) {
printf("Could not find file: %s n", filename);
}
else {
printf("Reading numbers...n");
fscanf(in, "%d", &len);
printf("reading %d numbers from file %s ....n", len, filename);
for(j=0;j<len;j++) {
fscanf(in, "%d", data + j);
}
fclose(in);
}
for(int i = 0; i<5; i++){
for(int j = 0; j < 5; j++){
matrixA[i][j] = *(data + i*5 + j);
}
}
return len;
}
void showMatrix(int *data, int len){
int j;
int count = 0;
printf("Showing %d numbers from data array....n", len);
printf("Matrix A is: n");
for(j=0;j<len;j++) {
printf("%d ", *(data + j));
count++;
if(count % 5 == 0){
printf("n");
}
}
printf("n");
}
void multiplyMatrices(int matrixA[5][5], int matrixB[5][5],int matrixC[5][5]){
int i, n, j;
int count = 0;
printf("n");
printf("Matrix A x Matrix B is: n");
for (i = 0; i<5; i++){
for (j = 0; j<5; j++){
matrixC[i][j] = 0;
matrixC[i][j] += matrixA[i][j]*matrixB[i][j];
printf("%d ",matrixC[i][j]);
count++;
if(count % 5 == 0){
printf("n");
}
}
}
}
好吧,
你的矩阵乘法算法是完全错误的。
你说"我想学习如何用指针来做",但事情是这样的,你已经在用指针来做这件事了。
在此代码中
void multiplyMatrices(int matrixA[5][5], int matrixB[5][5],int matrixC[5][5]){
变量 matrixA
、 matrixB
和 matrixC
是指针。在C++不可能有一个函数参数的数组。它会自动转换为指针。访问数组的语法与访问指针的语法相同,这也是事实。
如果你想明确表示你正在使用指针,那么像这样重写你的代码
void multiplyMatrices(int (*matrixA)[5], int (*matrixB)[5],int (*matrixC)[5]){
现在你可以看到matrixA
、matrixB
和matrixC
指向 5 个整数数组的指针。您不必进行任何其他更改。事实上,当您尝试将数组用作函数参数时,编译器所做的正是此更改。
这是一个好看的链接,解释了指针和数组的比较方式。该链接谈论 C,但规则在C++中是相同的。阅读它可能会帮助你比我更好地理解。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错