从函数指针输出动态数组

Output dynamic array from a function pointer

本文关键字:动态 数组 输出 指针 函数      更新时间:2023-10-16

我对指针很陌生,所以请耐心等待...

我的代码定义了一个用于两个矩阵(matrixMultiplication)相乘的函数。然后,我定义了一个指向此函数的函数指针。

#include <iostream>
void matrixMultiplication (const double A[3][3], const double B[3][3], double output[3][3])
{
    int i, j, k; 
    for (i=0;i<3;i++) 
    {
        for(j=0;j<3;j++)
        {
            for(k=0;k<3;k++)
            {
                output[i][j]+=A[i][k]*B[k][j];
            }
        }
    }
}
double (*matrixMultiplication (const double (*left)[3], const double (*right)[3]))[3]
{
    double output[3][3];
    matrixMultiplication(left, right, output);
}
int main ()
{
    using namespace std;
    double A[3][3]={{1,1,1},{1,1,1},{1,1,1}};
    double B[3][3]={{1,1,1},{1,1,1},{1,1,1}};
    cout<<"The function returns..."<<endl;
    double print[3][3]=matrixMultiplication(A,B);
    int i, j;
    for (i=0;i<3;i++)
    {
        for (j=0;j<3;j++)
        {
            cout<<print[i][j]<<"t";
        }
        cout<<"n";
    }
    return 0;
}

我想做的是输出指针函数 *matrixMultiplication 给出的数组,使用 for 循环(仅用于美学目的)。我已经玩过代码,最终遇到了初始化器或分段 (11) 错误。我觉得我错过了一些明显的东西,因为我是C++新手......

任何想法都将非常受欢迎!

问题在于:

double (*matrixMultiplication (const double (*left)[3], const double (*right)[3]))[3]
{
  double output[3][3];
  matrixMultiplication(left, right, output);
}

我不知道它是什么,我的编译器也不知道!;)

使用函数,

可以定义和使用矩阵乘法函数类型,如下所示:

#include <functional> // or <tr1/functional>
// type
typedef function<void (const double[3][3], const double[3][3], double[3][3])> MatrixFunction;
// instance
MatrixFunction matrixFunctionPtr(&matrixMultiplication);
// call
matrixFunctionPtr(A,B,print);

注意:您还需要在调用矩阵乘法函数之前声明输出数组double print[3][3]; *...

你有一个函数:

void matrixMultiplication (const double A[3][3], const double B[3][3], double output[3][3])
{
  ...
}

此函数有效。它需要三个数组作为参数(也就是说它需要三个指针 - 这是一个微妙的观点,我认为这对初学者来说不是一个很好的练习,因为它模糊了按值传递和按引用传递之间的区别 - 但现在不要介意)并返回void(即什么都没有),和。现在,您要构造一个指向此函数的函数指针。但是这个:

double (*matrixMultiplication (const double (*left)[3], const double (*right)[3]))[3]
{
  ...
}

不是一个函数指针;它是一个返回指向double数组的指针的函数,但它有一些内部错误(现在甚至不用担心它需要什么作为参数)。

让我们先做一个更简单的例子:

double foo(int n)      // function
{
  return(3);
}
int main()
{
  double (*bar)(int);  // function pointer
  bar = &foo;
  double z = (*bar)(5);
  cout << z << endl;
  return(0);
}

现在我们了解了函数指针的工作原理,我们将 1 应用于matrixMultiplication

void (*matFP)(const double A[3][3], const double B[3][3], double output[3][3]);
matFP = &matrixMultiplication;
double C[3][3];
(*matFP)(A,B,C);