我打算了解function pointers
在 CI 中为一个函数编写此程序的工作,该函数具有一个函数指针,该函数指针disp_function
预期打印任何类型的数组的内容,使用指向ptr
预期目标的指针,但它不起作用:
void show_array(void* ptr, void (*disp_function)(void*), int nr_elem) {
int i=0;
while(i<nr_elem) {
(*disp_function) (ptr);
ptr++;
i++;
}
}
下面是一个程序的使用实例:
void show_movements(Movement* movs, int nr) {
void (*display_function) (void* ptr) = show_movement;
show_array(movs, display_function, nr);
}
void show_movement(void* ptr) {
Movement* ptr2 = NULL;
ptr2 = (Movement*) ptr;
printf("%d -> '%s'\n", ptr2->id, ptr2->title);
}
程序在最后一个函数中崩溃。这是它的细节:
- 该数组有几个元素(> 2)
- 第一个打印正确
- 尝试打印第二个元素时程序崩溃(通过调试验证)
我想ptr++
这是导致崩溃的原因,因为我正在增加一个void*
. 我也尝试使用数组语法(*display_function) (ptr[i]);
,但我总是得到一个错误invalid use of void expression
谁能告诉我问题的确切原因是什么?