Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用指针乘以2个矩阵_C++_C_Arrays_Pointers_Matrix - Fatal编程技术网

C++ 使用指针乘以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

所以我想知道如何用指针乘以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");
      }
    }
  }
}
#包括
#包括
#包括
#包括
/*例行程序调用*/
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];}
决定你要使用哪种语言。非常棒的链接,非常感谢这正是我需要学习使用指针的地方。我看过的最好的教程。