2015-03-06 2 views
3

В чем разница между f1, (* f1), f2, (* f2)? и какая разница между (функцией) и функцией (&)?В чем разница между функцией с разыменованием и без разыменования

#include <iostream> 
using namespace std; 

void function (char *s) { 
    cout << s << endl; 
} 

int main() { 
    void (*f1) (char*) = &function; 
    void (*f2) (char*) = function; 

    f1 ("f1 function without dereference."); 
    (*f1) ("f1 function with dereference."); 
    f2 ("f2 function without dereference."); 
    (*f2) ("f2 function with dereference."); 
    return 0; 
} 
+1

Имя функции автоматически превращается в указатель на функцию, даже без явного '&', который является оператором «адрес», кстати. –

+1

Ничего ... они точно такие же. – eduffy

+0

см. Http://stackoverflow.com/questions/840501/how-do-function-pointers-in-c-work – FCo

ответ

4

В чем разница между f1 (* f1), f2 (* f2)?

f1 и f2 являются указателями на функции. (*f1) и (*f2) - ссылки на функции. В чем разница между указателями функций и ссылками на функции? Чрезвычайно мало, поскольку они оба вызываются с одним и тем же синтаксисом. Однако см. this question для более подробного объяснения ссылок на функции.

и какая разница между (функцией) и (& функцией)?

function - это функция. &function - указатель на функцию. Одно чрезвычайно незначительное различие здесь связано с тем фактом, что вы можете привязать ссылку на функцию к функции, но не к указателю на функцию.

void (&fref1)(char*) = function; // compiles 
void (&fref2)(char*) = &function; // does not compile 

Опять же, см. Связанный вопрос по возможным причинам, вы можете использовать ссылку на функцию (их немного).

 Смежные вопросы

  • Нет связанных вопросов^_^