C函数在不使用相同对象的情况下在struct内部调用
例如,我有下面的C代码:C函数在不使用相同对象的情况下在struct内部调用,c,function-calls,C,Function Calls,例如,我有下面的C代码: #include <stdio.h> #include <stdlib.h> struct a { void(*fun)(struct a *); int x; }; void fun(struct a *st) { ++st->x; } struct a *new_a() { struct a *v = (struct a*)malloc(sizeof(struct a)); v->fun
#include <stdio.h>
#include <stdlib.h>
struct a
{
void(*fun)(struct a *);
int x;
};
void fun(struct a *st)
{
++st->x;
}
struct a *new_a()
{
struct a *v = (struct a*)malloc(sizeof(struct a));
v->fun = fun;
return v;
};
int main()
{
struct a *v = new_a();
v->x = 5;
v->fun(v);
printf("%d\n", v->x);
}
#包括
#包括
结构a
{
无效(*fun)(结构a*);
int x;
};
虚无乐趣(结构a*st)
{
++st->x;
}
结构a*新的_a()
{
结构a*v=(结构a*)malloc(sizeof(结构a));
v->乐趣=乐趣;
返回v;
};
int main()
{
结构a*v=new_a();
v->x=5;
v->fun(v);
printf(“%d\n”,v->x);
}
当然,这会打印出
6
,但是,有没有一种方法不使函数调用依赖于使用相同的结构来调用它:v->fun()代码>,而不是v->fun(v)代码>?简短的回答是否。你需要C++。 简短的答案是<强>不<强>。您需要C++。 <强> NO.<强>,C没有简单的方法来实现这一点。C++提供了这个特性,称之为方法。如果您打算用类实现自己的C语言,那么在放弃之前,您将遇到语法噩梦
一个好的C风格的对象函数方法是函数将一个(主要是第一个)参数作为“self”(这是对被管理对象的引用)的约定。否。在C中,没有简单的方法可以做到这一点。C++提供了这个特性,称之为方法。如果您打算用类实现自己的C语言,那么在放弃之前,您将遇到语法噩梦
一个好的C风格的对象函数方法是函数将一个(主要是第一个)参数作为“self”(这是对被管理对象的引用)的约定。好吧,。。。对在结构之外定义它。至少它会节省你两次引用你的“对象”和存储函数指针,这几乎没有任何理由,或者——就像上面提到的——使用C++。你不能在代码< >结构< < />代码中添加<代码>结构*Auto/<代码>吗?对在结构之外定义它。至少它可以节省你两次引用你的“对象”,并且存储函数指针,几乎没有任何理由,或者——就像上面提到的——使用C++。你不能在代码< >结构> < /COD>中添加<代码>结构*A*自我/代码>吗?