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

Эй, ребята, я пытаюсь практиковать учебные указатели в 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.