void (*signal(int sig, void (*func) (int))) (int)理解
时间: 2023-07-15 19:14:35 浏览: 135
这是一个函数指针类型的声明,其返回值为一个函数指针,该函数指针指向一个具有一个 int 类型参数和返回值类型为 int 的函数。该函数的参数 sig 表示信号编号,参数 func 是一个指向函数的指针,该函数将在接收到信号时被调用。函数 signal 的返回值是一个函数指针,该函数指针指向之前与该信号相关联的函数,如果之前没有与该信号相关联的函数,则返回 SIG_ERR。该函数可以用于注册信号处理函数。
相关问题
void (*signal(int, void(*)(int))) (int);
函数指针是指向函数的指针变量。它可以用来存储函数的地址,并且可以通过函数指针来调用函数。\[1\]在C语言中,函数指针的声明方式为:返回类型 (*指针变量名)(参数列表)。对于给定的函数指针声明void (*signal(int, void(*)(int))) (int),可以进行如下解析:
- signal是一个函数,它有两个参数,一个是int类型的参数sig,另一个是指向函数的指针,该函数以int作为参数,返回值为空。
- 函数指针func是一个指向函数的指针,该函数以int作为参数,返回值为空。
- signal函数的返回值是一个指向函数的指针,该函数以int作为参数,返回值为空。
换句话说,signal函数接受一个int类型的参数和一个指向函数的指针作为参数,并返回一个指向函数的指针,该函数以int作为参数,返回值为空。这种函数指针的使用通常用于回调函数的实现。\[3\]
#### 引用[.reference_title]
- *1* [《C陷阱和缺陷》void (*signal(int , void(*)(int)))(int)的深刻解读](https://blog.csdn.net/Miraitowa_GT/article/details/123832117)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [C语言经典案例 void (*signal(int sig, void (*func)(int)))(int) 解读,带你学习函数名的本质,函数指针与...](https://blog.csdn.net/qq_33704787/article/details/121950702)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
void (*signal(int sig,void (*func)(int)))(int),此函数是linux中信号处理函数的原型,由于语法晦涩,很荣幸的也出现在了《C陷阱与缺陷中》,理解的难点在于void ( *signal(xxx) )(int),这里与我们平常看到的void ( *p )(int) 函数指针的写法有差异,关键点在于要把看成*signal(xxx) 整体;这段话说的差异是什么 我觉得没差异啊
这段话中所说的差异指的是函数指针的写法与我们平常看到的函数指针写法有一些微小的差别。平常我们看到的函数指针的写法是类似于 void (*p)(int) 的形式,而这里的函数指针写法是 void (*signal(xxx))(int) 的形式,把 signal(xxx) 看成整体。虽然看起来有些不同,但本质上是一样的,都是指向函数的指针。
阅读全文