假设我有这三个功能:
bool A();
bool B();
bool C();
Run Code Online (Sandbox Code Playgroud)
如何使用函数指针有条件地调用其中一个函数,如何声明函数指针?
Abh*_*eet 35
您可以执行以下操作:假设您具有以下A,B和C功能:
bool A()
{
.....
}
bool B()
{
.....
}
bool C()
{
.....
}
Run Code Online (Sandbox Code Playgroud)
现在在其他一些函数,比如main:
int main()
{
bool (*choice) ();
// now if there is if-else statement for making "choice" to
// point at a particular function then proceed as following
if ( x == 1 )
choice = A;
else if ( x == 2 )
choice = B;
else
choice = C;
if(choice())
printf("Success\n");
else
printf("Failure\n");
.........
.........
}
Run Code Online (Sandbox Code Playgroud)
记住这是函数指针的一个例子.还有其他几种方法,你必须清楚地学习功能指针.
Dal*_*und 17
我认为你的问题已经得到了足够的回答,但是明确地指出给定一个函数指针可能是有用的
void (*pf)(int foo, int bar);
Run Code Online (Sandbox Code Playgroud)
这两个电话
pf(1, 0);
(*pf)(1, 0);
Run Code Online (Sandbox Code Playgroud)
根据定义,各方面都完全相同.选择哪个使用取决于您,尽管保持一致是个好主意.很长一段时间,我更喜欢,(*pf)(1, 0)
因为在我看来它更好地反映了它的类型pf
,但是在过去的几年里我已经转向了pf(1, 0)
.
Vij*_*jay 14
最初定义一个函数指针数组,它接受一个void并返回一个void.假设你的函数正在取消空白并返回空白.
typedef void (*func_ptr)(void);
Run Code Online (Sandbox Code Playgroud)
现在你可以用它来创建这些函数的函数指针变量.如下:
func_ptr array_of_fun_ptr[3];
Run Code Online (Sandbox Code Playgroud)
现在将函数的地址存储在三个变量中.
array_of_fun_ptr[0]= &A;
array_of_fun_ptr[1]= &B;
array_of_fun_ptr[2]= &C;
Run Code Online (Sandbox Code Playgroud)
现在你可以使用函数指针调用这些函数,如下所示:
some_a=(*(array_of_fun_ptr[0]))();
some_b=(*(array_of_fun_ptr[1]))();
some_c=(*(array_of_fun_ptr[2]))();
Run Code Online (Sandbox Code Playgroud)
您可以按如下方式声明函数指针:
bool (funptr*)();
Run Code Online (Sandbox Code Playgroud)
这说我们正在声明一个函数指针,该函数指向一个不带任何东西的函数并返回一个bool.
下一个作业:
funptr = A;
Run Code Online (Sandbox Code Playgroud)
要使用函数指针调用该函数:
funptr();
Run Code Online (Sandbox Code Playgroud)
bool (*FuncPtr)()
FuncPtr = A;
FuncPtr();
Run Code Online (Sandbox Code Playgroud)
如果您想有条件地调用其中一个函数,则应考虑使用函数指针数组。在这种情况下,您将有 3 个元素指向 A、B 和 C,并且您根据数组的索引调用其中一个元素,例如 A 的 funcArray0。
归档时间: |
|
查看次数: |
99348 次 |
最近记录: |