Я нашел этот камень в списке рассылки GCC , который печатает параметры по умолчанию -march
и mtune
:
$ echo | gcc -v -E - 2>&1 | grep cc1
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/cc1 -E -quiet -v - -mtune=generic -march=x86-64
По сути, вы компилируете пустой файл из stdin и при этом вы печатаете команды.
Чтобы передать указатель на int, это должно быть void Fun(int* pointer)
.
Передача ссылки на int будет выглядеть так ...
void Fun(int& ref) {
ref = 10;
}
int main() {
int test = 5;
cout << test << endl; // prints 5
Fun(test);
cout << test << endl; // prints 10 because Fun modified the value
return 1;
}
Возможно, вам будет легче понять, используя функционально более выразительные и мощные функциональные возможности, см. Этот превосходный и настоятельно рекомендуемый C ++ FAQ lite , в частности, смотрите раздел 33.12 и далее, но, тем не менее, Прочитайте его с самого начала этого раздела, чтобы понять и понять его.
Чтобы ответить на ваш вопрос:
typedef void (*foobar)() fubarfn;
void Fun(fubarfn& baz){
fubarfn = baz;
baz();
}
Редактировать:
&
означает адрес ссылки *
означает значение того, что содержится по адресу ссылки, называемое разыменованием . Таким образом, использование ссылки, приведенного ниже примера, показывает, что мы передаем параметр, и напрямую изменим это.
void FunByRef(int& iPtr){
iPtr = 2;
}
int main(void){
// ...
int n;
FunByRef(n);
cout << n << endl; // n will have value of 2
}