声明之间有什么区别:void(* allocators [])(size_t)和void * allocators []?

时间:2015-04-19 16:46:01

标签: c

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 };

这两个声明有什么区别?

1 个答案:

答案 0 :(得分:2)

首先是正确的。在第一次声明中,在初始化器中不需要&。它应该是

 void (*allocators[])(size_t) = { f00, f01, ... , f39 }; 

它将allocators声明为函数指针数组,不返回任何内容并期望参数size_t类型。
(size_t)通知编译器所有函数都需要这种类型的参数。

第二个是错误的,因为它声明了一个指向void的指针数组。