Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

exercise

1 view
Skip to first unread message

Valera Kolesnik

unread,
Dec 21, 2007, 5:39:34 AM12/21/07
to
Hello everybody.

и в продолжение предыдущего вопроса:

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

Andrey Tarasevich

unread,
Jan 7, 2008, 8:57:39 PM1/7/08
to
Fri Dec 21 2007 13:39, Valera Kolesnik wrote to All:

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, Андрей

Andrey Tarasevich

unread,
Jan 7, 2008, 8:59:13 PM1/7/08
to
Tue Jan 08 2008 04:57, Andrey Tarasevich wrote to Valera Kolesnik:


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, Андрей

Valera Kolesnik

unread,
Jan 7, 2008, 3:13:09 PM1/7/08
to
Hello Andrey.

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

0 new messages