2014-09-20 61 views
5

所以可以说我有一个功能:回调函数:void之间的差异(* FUNC)(int)和无效(FUNC)(INT)

void foo (int i){ 
    cout << "argument is: " << i << endl; 
} 

而且我通过这个功能:

void function1 (void(callback)(int), int arg){ 
    callback(arg); 
} 

void function2 (void(*callback)(int), int arg){ 
    callback(arg); 
} 

这两个功能是否相同?两者有什么区别?

+2

完全相同。参数中的函数类型被调整为指针。 – 2014-09-20 21:42:11

+0

与声明一个接受'int * x'和'int x []''的函数相同的处理;你不能按值传递函数或数组;没有显式'*'的版本只是指针版本的语法糖。 – ShadowRanger 2015-12-23 14:28:17

回答

1

它们是相同的。具有函数类型的参数被转换为指向函数类型的指针。

3

规则是,在一个函数的参数列表中,一个被声明为具有函数类型的参数被调整为具有指向函数类型的指针(类似地,并且可能更为熟知的是,声明为类型为“数组”的参数T “被调整为具有类型‘指针T’,在说明符冗余括号是允许的,但是忽略

因此,在

void function1 (void(callback)(int), int arg); 
void function2 (void (*callback)(int), int arg); 
void function3 (void callback(int), int arg); 

的这三项功能的第一个参数具有完全相同的类型 - ”。指向函数(int)的指针返回void“。

相关问题