调用指向函数的指针

时间:2012-12-25 10:05:49

标签: c

我正在尝试使用指向结构内部函数的指针来调用函数hfun

这些是类型定义:

typedef struct Table* TableP;
typedef struct Object* ObjectP;
typedef int(*HashFcn)(const void *key, size_t tableSize);
typedef struct Object {
    void *key;
    ObjectLink *top;
} Object;

typedef struct Table{
    ObjectLink *linkedObjects;
    size_t size, originalSize;
    HashFcn hfun;
    PrintFcn pfun;
    ComparisonFcn fcomp;
} Table;

在这里,我正在尝试拨打电话,但收到一个错误,我正试图访问一个内存不足的地方:

Boolean InsertObject(TableP table, ObjectP object)
{

    int i = (*table->hfun)(object->key, table->size);
    if (table->linkedObjects[i].key == NULL)
    {
        table->linkedObjects[i].key = object;
    } else
    {
        table->linkedObjects[i].next->key = object;
    }

    return TRUE;
}

使用Eclipse调试器我可以告诉我,在调用时,变量的值是:

object->key输入void*0x804c018
table->size输入size_t1

我想这不是调用函数指针的方法。这有什么不对?

编辑:

在调试中我也可以看到: *table->hfun类型int(const void *,size_t) table->hfun输入HashFcn0x11

1 个答案:

答案 0 :(得分:6)

你没有以正确的方式称呼它。

您可以像访问任何其他功能一样访问函数指针。

table->hfun(object->key, table->size)

[编辑]右键,确保您还正确分配了hfun

int myFunc(const void* key, size_t tableSize) { }

table->hfun = &myFunc;