40个不同的分配函数提供40个不同的呼叫站点
void f00(size_t sz) { void* ptr = malloc(sz); free(ptr); }
void f01(size_t sz) { void* ptr = malloc(sz); free(ptr); }
...
void f39(size_t sz) { void* ptr = malloc(sz); free(ptr); }
这些分配函数的数组。我需要如何定义?
像这样:为什么(size_t)
?:
void (*allocators[])(size_t) = { &f00, &f01, ... , &f39 };
或
void* allocators[] = { &f00, &f01, ... , &f39 };
这两个声明有什么区别?
答案 0 :(得分:2)
首先是正确的。在第一次声明中,在初始化器中不需要&
。它应该是
void (*allocators[])(size_t) = { f00, f01, ... , f39 };
它将allocators
声明为函数指针数组,不返回任何内容并期望参数size_t
类型。
(size_t)
通知编译器所有函数都需要这种类型的参数。
第二个是错误的,因为它声明了一个指向void
的指针数组。