C++ 使用指针乘以2个矩阵
所以我想知道如何用指针乘以2个矩阵。它成功地按照现在的方式工作,但是我想学习指针的使用,而不是使用传统的数组访问方法 这是我的密码:C++ 使用指针乘以2个矩阵,c++,c,arrays,pointers,matrix,C++,C,Arrays,Pointers,Matrix,所以我想知道如何用指针乘以2个矩阵。它成功地按照现在的方式工作,但是我想学习指针的使用,而不是使用传统的数组访问方法 这是我的密码: #include <stdio.h> #include<conio.h> #include <stdlib.h> #include <iostream> /* Routines called. */ int loadMatrixFromFile(char *filename, int *data); void sh
#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");
}
}
}
}
#包括
#包括
#包括
#包括
/*例行程序调用*/
int loadMatrixFromFile(字符*文件名,int*数据);
void showMatrix(int*数据,int len);
int-makeIdent(int-matrixB[5][5],int-length);
int矩阵[5][5];
int matrixB[5][5];
int matrixC[5][5];
void乘法矩阵(int-matrixA[5][5]、int-matrixB[5][5]、int-matrixC[5][5]);
int main(){
整数长度,数据[1000];
len=loadMatrixFromFile(“Numbers.txt”,数据);
showMatrix(数据,len);
makeIdent(矩阵b,len);
多重矩阵(matrixA、matrixB、matrixC);
}
int makeIdent(int matrixB[5][5],int len){
int i,j;
printf(“矩阵B为:\n”);
对于(i=0;i你的矩阵乘法算法是完全错误的
你说“我想学习如何使用指针”,但问题是,你已经在使用指针了
在此代码中
void multiplyMatrices(int matrixA[5][5], int matrixB[5][5],int matrixC[5][5]){
<>变量>代码> Matrxa < /C> >代码> MatRXB和 MatRXC 指针。在C++中,不可能有一个函数参数的数组。它自动转换成指针。访问数组的语法与访问指针的语法相同。
如果您想明确表示您正在使用指针,那么请像下面这样重写您的代码
void multiplyMatrices(int (*matrixA)[5], int (*matrixB)[5],int (*matrixC)[5]){
现在您可以看到matrixA
、matrixB
和matrixC
指向5个整数数组的指针。您不必进行任何其他更改。事实上,当您尝试将数组用作函数参数时,编译器正是这样做的
这是一个很好的链接,它解释了C,但是C++中的规则是相同的。读一读它可能会帮助你更好地理解。<>代码> MatrxC[i] [j] + = MatRIXA[i] [j] * MatrxB[i]
不是矩阵乘法的工作原理!我看不到指针在这个应用程序中有任何好处或用途。它只会使事情变得复杂。下面的链接解释了如何用指针表示2D矩阵。@Martin R我最初做的是matrixC[I][n]+=matrixA[I][j]*matrixB[j][n],但它给了我一个不同于我要找的矩阵。这就是你的意思吗?for(k=0;k<5;k++){matrixC[I][j]+=matrixA[I][k]*matrixB[k][j];}
决定你要使用哪种语言。非常棒的链接,非常感谢这正是我需要学习使用指针的地方。我看过的最好的教程。