函数指针作为结构成员

时间:2015-01-22 10:05:24

标签: c pointers function-pointers

    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”函数指针。

提前谢谢。

1 个答案:

答案 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;
}