и в продолжение предыдущего вопроса:
Write declarations for the following:
a function taking arguments of type pointer to character and reference to
integer and returning no value;
void f1(char* pc, int& ri);
a pointer to such a function;
void (*pf1)(char*, int&);
a function taking such a pointer as an argument;
int f2(int i, void (*pf2)(char*, int&));
and a function returning such a pointer.
void (*f3)(char*, int&) f3(int i, char c);
и вот в последнем я почему-то сомневаюсь. да и компилятор ругается -
инициализатор хотит. а как правильно - не знаю.
Valera
VK> Write declarations for the following:
VK> a function taking arguments of type pointer to character and reference to
VK> integer and returning no value; void f1(char* pc, int& ri);
VK> a pointer to such a function;
VK> void (*pf1)(char*, int&);
VK> a function taking such a pointer as an argument;
VK> int f2(int i, void (*pf2)(char*, int&));
VK> and a function returning such a pointer.
VK> void (*f3)(char*, int&) f3(int i, char c);
VK> и вот в последнем я почему-то сомневаюсь. да и компилятор ругается -
VK> инициализатор хотит. а как правильно - не знаю.
Hаписано неверно. Также в вопросе не сказано, какие параметры такая функция
должна принимать. Будем считать, что 'int' и 'char' как у тебя. Тогда
правильно
void (*f3(int i, char c))(char*, int&);
Best regards, Андрей
VK>> and a function returning such a pointer.
VK>> void (*f3)(char*, int&) f3(int i, char c);
VK>> и вот в последнем я почему-то сомневаюсь. да и компилятор ругается -
VK>> инициализатор хотит. а как правильно - не знаю.
AT> Hаписано неверно. Также в вопросе не сказано, какие параметры такая
AT> функция должна принимать. Будем считать, что 'int' и 'char' как у тебя.
AT> Тогда правильно
AT> void (*f3(int i, char c))(char*, int&);
Разумеется, по уму надо было бы сделать через тот же typedef:
typedef void (*F)(char*, int&);
F f3(int i, char c);
или
typedef void F(char*, int&);
F* f3(int i, char c);
Best regards, Андрей
08 Jan 08 04:59, you wrote to you:
AT>> Тогда правильно
AT>> void (*f3(int i, char c))(char*, int&);
AT> Разумеется, по уму надо было бы сделать через тот же typedef:
AT> typedef void (*F)(char*, int&);
AT> F f3(int i, char c);
AT> или
AT> typedef void F(char*, int&);
AT> F* f3(int i, char c);
через typedef оно сразу делалось, но только по аналогии со страстроповым.
понятия, почему это так возможно, достаточно не было. теперь ты объяснил -
более-менее стал понимать.
спасибо за детальный и понятный ответ. а то я уж встревожился было - то ли
непроходимо глупый вопрос задал, то ли нет больше плюсистов в фидо.
p. s. на страуструпе в главе о механизмах абстракции стал слегка мозг рваться
наружу - взял брейк и засел за липпмана. вопросами какое-то время докучать не
буду ;-)
Valera