从函数指针输出动态数组
Output dynamic array from a function pointer
我对指针很陌生,所以请耐心等待...
我的代码定义了一个用于两个矩阵(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);
相关文章:
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 输出没有重复元素的动态数组(收缩数组)C++
- 正在插入动态数组
- 如何在动态数组上使用搜索函数
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 静态数组的自由动态数组
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 使用 thread 类在 C++ 中构造线程的动态数组时出错
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 为什么 c++ 动态数组的大小没有改变?
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 指针的 C++ 动态数组 - 何时需要使用它?
- 删除动态数组时未定义标识符
- 哈希映射使用 nullptr c++ 初始化节点的动态数组
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 动态数组的 C++ 重载加运算符
- 基于数组的列表 - 动态数组创建时出错