为啥(*func_ptr)(1, 2)而不是func_ptr(3, 4)
时间: 2024-04-05 19:29:16 浏览: 31
因为在这个例子中,`func_ptr`是一个函数指针,它指向的函数接受两个参数。所以当你想要调用这个函数时,你需要使用`(*func_ptr)(1, 2)`这种语法,其中`(*func_ptr)`表示解引用函数指针,即获取指针所指向的函数,并将其作为函数来调用,而`(1, 2)`则是向函数传递的实参。如果你使用`func_ptr(3, 4)`这种语法来调用函数,那么实际上会尝试调用函数指针本身,而不是指向的函数。
相关问题
如果存在*func_ptr函数指针和普通函数func_ptr时,会歧义吗
如果存在`*func_ptr`函数指针和普通函数`func_ptr`,在使用时可能会产生歧义。因为在C语言中,函数名本身就是函数的地址,所以在某些情况下,可以将函数名作为函数指针来使用。例如:
```c
int add(int a, int b) { return a + b; }
int (*func_ptr)(int, int) = add; // 将函数名作为函数指针
int result = func_ptr(1, 2); // 调用函数指针
```
在这个例子中,`func_ptr`是一个函数指针,它指向的是函数`add`。由于函数名`add`本身就是函数的地址,所以可以将`add`作为函数指针来使用。因此,如果存在`*func_ptr`函数指针和普通函数`func_ptr`,在某些情况下,可能会产生歧义,需要根据具体的语境来判断。
cmd_execution_result *(*func_ptr)(void *)
"cmd_execution_result *(*func_ptr)(void *)" 是一种函数指针类型的描述,它代表指向返回类型为 `cmd_execution_result` 的函数的指针,这个函数接受一个 `void *` 类型的参数。简单来说,这是一个可以指向某个函数,这个函数能够执行命令并返回执行结果,其输入是一个通用的 void 指针,可能用于传递额外的数据。
举个例子,如果你有一个包含不同执行策略的函数库,每个函数接收一个命令并返回执行结果,你可以用这种形式的指针来动态地选择和调用合适的函数:
```c
typedef cmd_execution_result (*execute_command_fn)(void *);
// ...
// 定义了一些具体的执行函数
cmd_execution_result execute_with_strategy_one(void *data) {
// 执行操作...
}
cmd_execution_result execute_with_strategy_two(void *data) {
// 另一种执行操作...
}
// 使用时
execute_command_fn strategy;
strategy = execute_with_strategy_one; // 或 strategy = execute_with_strategy_two;
cmd_execution_result result = strategy(data); // 调用具体的执行函数
```
阅读全文