为啥(*func_ptr)(1, 2)而不是func_ptr(3, 4)
时间: 2024-04-04 10:36:04 浏览: 16
因为在这个例子中,`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`,在某些情况下,可能会产生歧义,需要根据具体的语境来判断。
typedef void (*ISR_FUNC_PTR)(void);
这是一个函数指针类型的定义,名字为 ISR_FUNC_PTR,它指向一个没有参数和返回值的函数。在嵌入式系统中,常常用它来定义中断服务函数(ISR, Interrupt Service Routine)的类型。这样定义之后,就可以通过将函数指针指向具体的函数来注册中断服务函数。当中断发生时,处理器会跳转到该函数执行中断处理。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)