从函数指针输出动态数组

时间:2013-11-15 12:51:07

标签: c++ arrays pointers for-loop dynamic-arrays

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

我的代码定义了两个矩阵(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;
}

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

任何想法都会受到欢迎!

2 个答案:

答案 0 :(得分:1)

问题在于:

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

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

使用functional,可以定义和使用matrixMultiplication函数类型,如下所示:

#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);

注意:在调用matrixMultiplication函数之前,还需要声明输出数组double print[3][3]; * ...

答案 1 :(得分:0)

你有一个功能:

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);
}

现在我们看到函数指针是如何工作的,我们将一个应用于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);