void (*func)(int) 知道这样定义这个函数什么意思么?

来源:百度知道 编辑:UC知道 时间:2024/05/31 11:44:52
这个函数是这样的:void (*signal (int sinno,void(*func)(int)))(int)
这个函数有两个地方在结尾用(int),什么意思,比如void (*func)(int),在结尾加(int)代表什么意思?

先解释void (*func)(int):
void func()->void func(int)->void *func(int)->void (*func)(int)
上面的图示能看明白吧?func是一个函数指针,它的返回类型为空,它所指向的函数接收一个int型的参数。若是写成void *func(int)则变成了:func是一个函数,它的返回类型是空指针,它接受一个int型参数。

所以void (*signal(int sinno,void(*func)(int)))(int)意思是:
signal是一个函数指针,它的返回类型是void,它接收一个int类型的参数;不过这个指针是另一个函数的返回值,它接收2个参数,第一个是int,第二个已经解释过了。

UNIX下有个工具CDECL,可以自动翻译这种声明,你可以让它翻译下看看,和我说的是不是一致。我刚才在我的虚拟机里试了下,发现没有这个程序。所以没有验证。

void (*func)(int)
-----------------------

这种形式是“函数指针”。
原则是:
(1)第一:首先要有一个函数的基本形式。返回类型 ()(函数参数列表)
(2)第二:就是(1)中的括号部分。表示一个指向函数名称的指针。所以用*声明。*一定要在指针名的前面。
就是这两个原则就行了。

首先分析void(*func)(int))这是一个函数指针,你可以用typedef 定义一个新类型:
typedef void(*T)(int))

此时新类型T便代替了前面的函数指针,然后:
void (*signal (int sinno,T))(int)
这样看就明白一些了,函数指针T作为函数signal的形参,同样函数signal也是一个函数指针,最后的int是函数指针signal所指向的函数的参数,一个整形的参数。

(int)就是参数表啊,和(int n)之类一样,只是没为参数制定名字,所以在函数中无法使用参数而已

int 应该是指参数的类型吧,这个应该是在函数申明的时候