我有一个这样的界面:
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方法的第一个成员是指向同一个结构的指针?
有人可以解释一下吗?
谢谢
你必须设置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)