void TestOperation_Init(const void *Ptr)
{
/*do something*/
}
struct FeatureStruct
{
const Select *S;
void (*Init)(const void *Ptr);
};
sturct Cnf
{
const FeatureStruct *Feature;
};
const Cnf Cnf_1[0]=
{
&FeatureStruct_1[0],
};
const FeatureStruct FeatureStruct_1[0]=
{
(Select*)&TestStruct,
TestOperation_Init,
};
const Cnf *CnfPtr;
void Main_Init(const Cnf *MainCnfPtr)
{
CnfPtr=MainCnfPtr;
CnfPtr->Feature->Init(CnfPtr->Feature->S);
}
用户将致电
Main_Init(&Cnf_1[0]);
现在,如果我想访问功能结构的成员
我这样写
CnfPtr->Feature->Init(CnfPtr->Feature->S);
但是编译器在“Feature-> Init”和Feature-> S“中给出了错误 - 左侧是>不是struct
如果我这样写
CnfPtr->Feature.Init(CnfPtr->Feature.S);
它起作用并且没有错误。
我的问题是, 访问另一个结构的函数指针的正确方法是什么? 因为Feature是指向结构的指针,它指向“Init”函数指针。
提前谢谢。
答案 0 :(得分:3)
看一下下面的代码片段,它将展示如何访问结构中的函数指针。请注意C是区分大小写的。在你的代码中,你倾向于忽略它。
问题:
访问函数指针的正确方法是什么 另一种结构?
struct FeatureStruct
{
void (*Init)();
};
struct Cnf
{
struct FeatureStruct *Feature;
};
void func()
{
printf("Hi\n");
}
int main(void) {
struct Cnf *CnfPtr;
CnfPtr = malloc(sizeof(struct Cnf));
CnfPtr->Feature = malloc(sizeof(struct FeatureStruct));
CnfPtr->Feature->Init = func;/* Initialize your pointer */
CnfPtr->Feature->Init();
return 0;
}