使用指针乘以矩阵
Multiplying matrices using pointers
本文关键字:指针 更新时间:2023-10-16
嘿伙计们,我正在尝试练习学习 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");
}
}
在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;
}
这更接近您想要的乘法矩阵:
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++;
但我不想混淆这个问题。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错