gpt4 book ai didi

c++ - 使用指针将 2 个矩阵相乘

转载 作者:太空宇宙 更新时间:2023-11-04 02:54:52 30 4
gpt4 key购买 nike

所以我想弄清楚如何使用指针将 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]){

变量matrixAmatrixBmatrixC 是指针。在 C++ 中,函数参数不可能有一个数组。它会自动转换为指针。访问数组的语法与访问指针的语法相同也是事实。

如果你想明确表示你正在使用指针,那么像这样重写你的代码

void multiplyMatrices(int (*matrixA)[5], int (*matrixB)[5],int (*matrixC)[5]){

现在您可以看到 matrixAmatrixBmatrixC 指向 5 个整数的数组。您不必进行任何其他更改。事实上,这种变化正是编译器在您尝试将数组用作函数参数时所做的。

这是一个很好看的链接,解释了 how pointers and arrays compare .该链接讨论的是 C,但 C++ 中的规则是相同的。阅读它可能会帮助您比我更好地理解。

关于c++ - 使用指针将 2 个矩阵相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18841685/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com