拥有功能指针类型是什么意思
What does it mean to have a function pointer type?
我有一个课堂分配:
编写一个函数的声明,该函数采用两个int参数并返回一个int,并声明一个元素具有此函数指针类型的向量。
由于功能和向量都是int这是否正确的?我仍然对指针感到模糊。这就是我所拥有的:
#include <iostream>
#include <vector>
using std::cin; using std::cout; using std::endl; using std::vector;
// This is my function that take two ints and returns and int
int AddFunc ( int a, int b) { int addResult; addResult = a + b; return (addResult);}
int main()
{
vector <int> v1; // Declare a vector whose elements have this functions pointer types
int add1, add2, add3 = 0;
cout << "Enter two numbers to be added with my AddFunc function: ";
cin >> add1 >> add2;
add3 = AddFunc (add1, add2);
cout << "The numbers added equal: " << add3 << endl;
v1.push_back(add3);
cout << "The first element in the vector v1 is: " << v1 [0] << endl;
return 0;
}
功能指针类型为 int (*)(int, int)
。您想要这个:
typedef int (*fptr)(int, int);
std::vector<fptr> v;
示例:
int add(int a, int b) { return a + b; }
int mul(int a, int b) { return a * b; }
v.push_back(&add);
v.push_back(&mul);
然后类似的东西:
for (f : v) { std::cout << "f(5, 7) = " << f(5, 7) << std::endl; }
在C 中,您有能力定义功能指针,例如:
int (*pfunc) (int, int);
这是一个变量,只要它具有指定的签名,就可以分配函数的地址,例如:
pfunc = AddFunc; // Assign the adress of a function
pfunc(1,2) // Now call the function through the pointer
现在,请注意pfunc
是可变名称,其"官方"类型为int (*) (int,int)
自然,这一切都会变得非常混乱,所以您可能想打字:
typedef int (*AdderFunc)(int, int);
AdderFunc pfunc = AddFunc;
pfunc(1,2);
作业需要一个功能指针向量。如果您不习惯它们,功能指针很难阅读。这是您可以用来编写功能指针类型的方法。
首先,编写函数的参数列表。AddFunc()
进行了两个int
参数,因此起初您有:
(int, int)
要成为功能指针,您可以将其前缀为(*)
:
(*)(int, int)
最后,您将整个内容的返回类型与函数的返回类型相结合。在这种情况下,int
:
int (*)(int, int)
您可以将其用作向量的类型:
std::vector<int (*)(int, int)> v;
这将起作用。但是,通常更清楚地为功能指针定义自己的类型(使用typedef
)。起初,这样做似乎很棘手,但这很容易。您已经使用上述方法写下了类型。唯一缺少的是给它一个名字。您可以通过在(*)
中的*
之后编写名称来做到这一点。例如(*func_ptr)
,所以您有:
int (*func_ptr)(int, int)
,这就是typedef
的全部所需:
typedef int (*func_ptr)(int, int);
现在,每当您需要该特定功能指针类型时,而不是:
int (*)(int, int)
您可以写:
func_ptr
而是。因此,您的向量声明变为:
std::vector<func_ptr> v;
就向量而言,func_ptr
是一种指针类型。
函数指针与"常规"指针不同,因为它们将其调用它们指向的功能。您实际上并没有取消功能指针。相反,您在其上使用()
操作员。这样做调用他们指向的功能。
分配给功能指针意味着将其分配给函数的地址。例如,如果您具有func_ptr
类型的变量(上面您的typedef
ED):
func_ptr AddFunc_p;
您可以将其分配给AddFunc()
的地址:
AddFunc_p = AddFunc;
请注意AddFunc
中缺少的括号。您只能编写函数的名称,因为您不想实际调用该功能,而是想要其地址,以便您可以将其分配给AddFunc_p
。现在,您可以通过以下方式通过AddFunc_p
调用AddFunc()
AddFunc_p(some_int, another_int);
您现在应该能够扣除如何将功能指针放入向量中以及如何在其元素上应用()
操作员。这将有助于牢记矢量仅包含类型func_ptr
的元素。
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思