В чем разница между `& function` и` function` при передаче в качестве аргументов в C?

Например:

#include <stdio.h>

typedef void (* proto_1)();
typedef void proto_2();

void my_function(int j){
    printf("hello from function. I got %d.\n",j);
}

void call_arg_1(proto_1 arg){
    arg(5);
}
void call_arg_2(proto_2 arg){
    arg(5);
}
void main(){
    call_arg_1(&my_function);
    call_arg_1(my_function);
    call_arg_2(&my_function);
    call_arg_2(my_function);
}

Запустив это, я получаю следующее:

> tcc -run try.c
hello from function. I got 5.
hello from function. I got 5.
hello from function. I got 5.
hello from function. I got 5.

У меня два вопроса:

  • В чем разница между прототипом функции, определенным с помощью (* proto) и один определен без?
  • В чем разница между вызовом функции с оператором ссылки ( & ) и без?
20
задан brice 9 June 2011 в 13:19
поделиться