我对C编程并不陌生。但我不明白为什么在C中将指向函数的指针作为结构成员是有用的。示例:
// Fist Way: To keep pointer to function in struct
struct newtype{
int a;
char c;
int (*f)(struct newtype*);
} var;
int fun(struct newtype* v){
return v->a;
}
// Second way: Simple
struct newtype2{
int a;
char c;
} var2;
int fun2(struct newtype2* v){
return v->a;
}
int main(){
// Fist: Require two steps
var.f=fun;
var.f(&var);
//Second : simple to call
fun2(&var2);
}
字符串
程序员是用它来给予面向对象(OO)的形式给他们的C代码并提供抽象对象,还是只是让代码看起来像技术性的?
我认为在上面的代码中,第二种方法更温和,也很简单。在第一种方法中,我们仍然需要传递&var
,即使fun()
是结构体的成员。
如果在结构定义中保留函数指针是好的,请解释原因。
6条答案
按热度按时间uurity8g1#
提供指向结构上的函数的指针可以使您动态选择要对结构执行的函数。
字符串
这使您能够拥有单个调用接口,但根据测试是否有效而调用两个不同的函数。
thigvfpy2#
如果你想做一些“基于对象”的编程,它很有用。
如果你曾经看过雷神之锤3引擎的源代码,你可以清楚地看到,大多数“实体”都有定义它们的属性,以及它们所做的工作[这是函数指针]。
分离属性和函数(通过C中的函数指针)定义了“结构”对象的属性和它们可以执行的操作。
举例来说:
字符串
jei2mxaa3#
我过去用它在C中实现了泛型容器。
举例来说:
字符串
列表结构本身是数据不可知的,使用
void *
来表示数据项,并将所有类型感知的操作委托给上面的指针所指示的函数:型
1.对于“通用”和“容器”的适当宽松的定义,
wwtsj6pe4#
这在嵌入式系统或驱动程序编写中特别有用。函数是使用函数指针调用的。
例如
字符串
等
zf2sa74q5#
在C语言中,有时候你需要调用一个函数,而不需要预先知道它的实现。例如,如果你正在开发一个在不同项目中使用的独立库。在这种情况下,向上下文结构添加一个函数指针并将其沿着传递给库函数是非常有意义的。然后库函数可以在运行时调用你的函数,而不必包含定义它的头文件。
它确实类似于你在做面向对象编程时所做的事情。在C中,你通常传递上下文变量,例如一个结构,将一组变量和可能对该上下文有意义的函数组合在一起。这接近于OO编程中的等价,在OO编程中,你示例化一个类并在示例上设置所需的变量。
30byixjq6#
这里有一个项目来帮助解释函数指针的用处。尝试创建一个基于c的库,提供继承和多态性。或者,尝试重新创建“C with Classes”。结构内的函数指针将是至关重要的。http://www.cs.rit.edu/~ats/books/ooc.pdf