【发布时间】:2013-09-23 23:26:15
【问题描述】:
大家好,我正在尝试在 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<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 *ptr1, *ptr2, *ptr3;
ptr1 = &matrixA[5][5];
ptr2 = &matrixB[5][5];
ptr3 = &matrixC[5][5];
printf("\n");
printf("Matrix A x Matrix B is: \n");
for(i=0;i<5;i++){
for(j=0;j<5;j++){
*ptr3=0;
}
}
for (i = 0; i<5; i++){
for (j = 0; j<5; j++){
for(n=0;n<5;n++){
*ptr3 += (*ptr1**ptr2);
}
printf("%d ",*ptr3);
}
printf("\n");
}
}
【问题讨论】:
-
在 multiplyMatrices *ptr3=0;在一个循环中受到很多打击。似乎毫无意义。
-
在 multiplyMatrices ptr[1-3] 都指向矩阵的末尾!哎呀。
-
哦,你永远不会在 multiplyMatrices 中增加指针。
-
你是什么意思他们都指向矩阵的末尾?我在 multiplyMatrices 中进行了第一个循环,将 matricC 设为全 0。另外我该如何增加所有 3 个指针?
-
multiplyMatrices 中的第一个循环没有初始化 C。此外,您不需要初始化 C。C = A * B。试试我下面的代码,看看会发生什么。
标签: c++ c arrays pointers matrix-multiplication