如果我的结构具有指向像这样的函数的指针
struct str{
int some_element;
char other_element;
int (*my_pointer_to_a_function)(int);
};
struct str my_struct;
int my_function(int);
我将值赋予它
my_struct.some_element = 1;
my_struct.other_element = 'a';
my_struct.my_pointer_to_a_function = my_function;
如何调用指针指向的函数(使用指针)? 我最初的猜测是:
my_struct.(*my_pointer_to_a_function)(value);
或应该是
*my_struct.my_pointer_to_a_function(value);
谢谢。
答案 0 :(得分:4)
指向函数的指针可以按原样使用,不需要任何解引用:
my_struct.my_pointer_to_a_function(value)
但是如果你坚持要取消引用它,你必须这样使用括号:
(*my_struct.my_pointer_to_a_function)(value)
它们都是完全等价的,所以我推荐第一个,这更简单。
关于你的第一次尝试:
my_struct.(*my_pointer_to_a_function)(value); //Error!
这是行不通的,因为必须首先评估parenthersis中的表达式:*my_pointer_to_a_function
,但这本身就没有任何意义。
你的第二个:
*my_struct.my_pointer_to_a_function(value); //Error!
运算符优先级规则首先评估.
,然后是函数调用,最后评估*
:
*(my_struct.my_pointer_to_a_function(value)); //Error!
因此将调用该函数,但调用的结果int
将被取消引用,因此错误。
答案 1 :(得分:2)
假设您有结构成员的函数指针,如:
struct newtype{
int a;
char c;
int (*f)(struct newtype*);
} var;
int fun(struct newtype* v){
return v->a;
}
您可以按如下方式调用它:
int main(){
var.f=fun;
var.f(&var);
// ^.....^..... have to pass `var` as an argument to f() :( :(
}
//Comment: here in var.f(&var); I miss this pointer and C++,
因此,对于您的情况,它应该只是my_struct.my_pointer_to_a_function(value);
另外要点:
在我的示例中要注意的重要事项,即使您想要访问相同结构变量的成员,您也必须通过它。 (它与c ++对象完全不同!)
C ++类中的虚函数。它们在引擎盖下以类似的方式实现。
这是一个可以帮助您使用的项目:Function pointers inside structures
答案 2 :(得分:-1)
使用此:
#define function mystruct.my_pointer_to_a_function
然后你可以调用函数:
int i = function(value);