【问题标题】:function pointer as structure member函数指针作为结构成员
【发布时间】:2015-01-22 10:05:23
【问题描述】:
    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”处给出错误->左侧不是结构

如果我这样写

CnfPtr->Feature.Init(CnfPtr->Feature.S);

它可以正常工作并且不会出错。

我的问题是, 访问另一个结构成员的函数指针的正确方法是什么? 因为 Feature 是指向结构的指针,它指向“Init”函数指针。

提前谢谢你。

【问题讨论】:

  • Sturct,真的吗?我可以用肉眼看到至少 4 个微不足道的错误。
  • 您给出的代码与您描述的不一样。请发布完整,您的代码的最小版本,以便其他人可以对其进行测试。
  • 对不起,现在我将尝试编写正确的语法。我刚刚写了逻辑。我提供了更多细节。

标签: c pointers function-pointers


【解决方案1】:

看看下面的代码 sn-p 它将显示如何访问结构中的函数指针。请注意 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;
}

【讨论】:

  • 我想,我不需要malloc。我已经更新了我的代码。
  • @Sam11 我无法弄清楚这里发生了什么变化,但如果你有一个指向你的结构的指针,那么你需要为它分配内存
猜你喜欢
  • 2010-11-23
  • 1970-01-01
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-04
相关资源
最近更新 更多