C结构问题

Pet*_*ett 4 c struct

我有一个这样的界面:

typedef struct Tree {
  int a;
  void* (*Something)(struct Tree* pTree, int size);
};
Run Code Online (Sandbox Code Playgroud)

然后据我所知,我需要创建它的实例,并使用Something方法将值设置为'size'.所以我这样做

struct Tree *iTree = malloc(sizeof(struct Tree));
iTree->Something(iTree, 128);
Run Code Online (Sandbox Code Playgroud)

但它始终无法初始化.我这样做了吗?如果Something方法的第一个成员是指向同一个结构的指针?

有人可以解释一下吗?

谢谢

Joe*_*Joe 8

你必须设置Something一些东西,因为它只是一个函数指针,而不是一个函数.使用malloc创建的结构只包含垃圾和结构字段,在它有用之前需要进行设置.

struct Tree *iTree = malloc(sizeof(struct Tree));
iTree->a = 10; //<-- Not necessary to work but you should set the values.
iTree->Something = SomeFunctionMatchingSomethingSignature;
iTree->Something(iTree, 128);
Run Code Online (Sandbox Code Playgroud)

更新

#include <stdlib.h>
#include <stdio.h>

struct Tree {
    int a;
    //This is a function pointer
    void* (*Something)(struct Tree* pTree, int size);
};

//This is a function that matches Something signature
void * doSomething(struct Tree *pTree, int size)
{
    printf("Doing Something: %d\n", size);
    return NULL;
}

void someMethod()
{
    //Code to create a Tree
    struct Tree *iTree = malloc(sizeof(struct Tree));
    iTree->Something = doSomething;
    iTree->Something(iTree, 128);
    free(iTree);
}
Run Code Online (Sandbox Code Playgroud)