当我阅读cJSON的代码时,并且在理解代码时遇到了问题:
static void *(*cJSON_malloc)(size_t sz) = malloc;
static void (*cJSON_free)(void *ptr) = free;
答案 0 :(得分:2)
这只是函数指针。通过这种方式,我们可以使用' cJSON_malloc'代替malloc 和cJSON_free代替免费。
答案 1 :(得分:2)
那些是函数指针初始化。例如:
static void *(*cJSON_malloc)(size_t sz) = malloc;
相当于:
typedef void *(*cJSON_malloc_type)(size_t sz);
static cJSON_malloc_type cJSON_malloc = malloc;
我希望这更容易理解。
答案 2 :(得分:1)
正如其他人已经提到的,这些是函数指针。有了这些,你可以在运行时更改allocator和deallocator函数。
为什么你想要使用不同于malloc和free的分配器有很多原因,例如:
将每个分配和释放打印到stdout的示例分配器:
void *my_malloc(size_t size) {
void *pointer = malloc(size);
printf("Allocated %zu bytes at %p\n", size, pointer);
return pointer;
}
void my_free(void *pointer) {
free(pointer);
printf("Freed %p\n", pointer);
}
void change_allocators() {
cJSON_hooks custom_allocators = {my_malloc, my_free};
cJSON_InitHooks(custom_allocators);
}