Умножение матриц с помощью указателей

Эй, ребята, я пытаюсь практиковать учебные указатели в c++. Поэтому я пытаюсь размножать эти массивы и получаю все 0 в моей результирующей матрице. если кто-нибудь может просто намекнуть мне, что посмотреть или какие-то советы о том, что вызывает это, было бы потрясающе.

Вот код:

#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;
 int *ptr;
 ptr = &matrixB[5][5];
 printf("Matrix B is: \n");
 for(i=0;i<5;i++){
 for(j=0;j<5;j++){
 if(i==j){
 *ptr=1;
 printf("%d ", *ptr);
 }
 else{
 *ptr=0;
 printf("%d ",*ptr);
 }
 }
 printf("\n");
 }
 return *ptr;
 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</iostream></stdlib.h></conio.h></stdio.h>
1 ответ

В makeIdent вам нужно увеличивать ptr после каждого элемента. Для инициализации ptr вам нужно указать его на первый элемент в массиве, а не на последний элемент.

int makeIdent(int matrixB[5][5], int len){
 int i,j;
 int *ptr;
 ptr = &matrixB[0][0]; // note the 0 instead of the 5
 printf("Matrix B is: \n");
 for(i=0;i<5;i++){
 for(j=0;j<5;j++){
 if(i==j){
 *ptr=1; 
 printf("%d ", *ptr);

 }
 else{
 *ptr=0;
 printf("%d ",*ptr);
 }
 ptr++; // this is new
 }
 printf("\n");
 }
 return 0;
}

Это ближе к тому, что вы хотите для multiplyMatrices:

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

 int i, n, j;
 int *ptr1, *ptr2, *ptr3;
 ptr1 = &matrixA[0][0];
 ptr2 = &matrixB[0][0];
 ptr3 = &matrixC[0][0];

 for (i = 0; i<5; i++) {
 for (j = 0; j<5; j++) {
 *ptr3 = (*ptr1 * *ptr2);
 ptr1++; ptr2++; ptr3++;
 }
 }
}

Вы могли бы сказать это вместо этого:

*ptr3++ = *ptr1++ * *ptr2++;

Но я не хочу путать проблему.

licensed under cc by-sa 3.0 with attribution.