我必须马上说我提供的代码不完整。如果您不理解我的问题的本质,并且原因是“代码不完整”,那么最后我将提供一个完整代码示例的链接。
#include <stdio.h>
void dbleInt(void *a) {
*((int*) a) *= 2;
}
void dbleDouble(void *a) {
*((double*) a) *= 2.0;
}
void map(void *arr, unsigned num, size_t size, void (*fun)(void *)) {
unsigned i;
char *ptr = (char*) arr;
for (i = 0; i < num; i++) {
fun((void*) (ptr + i*size)); /* !!!!!! */
}
}
int main () {
return 0;
}
给定行
fun((void*) (ptr + i*size));
我会这样写
fun(ptr + i*size);
正确的书写方式是什么,这两个条目之间有区别吗?
ps 3 计数示例从开始https://learnc.info/c/function_pointers.html
正式地“正确地”等等。但是,建议您尝试编写尽可能与类型无关的代码。也就是说,作为此建议的一部分,您应该尽量避免在代码中不必要地提及类型名称。特别是,这意味着应该避免不必要的显式强制转换(“强制转换”)。在您的情况下,类型转换为
并且在
例如,在您的链接的另一个示例中使用的令人难以置信的可怕结构
可以“清理”到更加优雅和可见的状态
PS这个问题与你在问题标题中提到的“指向函数的指针”没有直接关系。
允许隐式转换为
void*
,所以它不会有所作为。如何写得更正确更多的是品味和色彩风格的问题,即 你不太可能得到明确的答案。