我正试图使用指向结构中包含的函数的指针来调用函数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

最佳答案

你说的不对。
您可以像访问任何其他函数一样访问函数指针。

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

[编辑]对,确保您也正确分配了hfun
int myFunc(const void* key, size_t tableSize) { }

table->hfun = &myFunc;

关于c - 调用函数的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14029640/

10-11 19:44
查看更多