我对指针很新,所以请耐心等待......
我的代码定义了两个矩阵(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 ++的新手,我觉得我错过了一些明显的东西......
任何想法都会受到欢迎!
答案 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);