собственно через typedef у меня это все работало.
тогда это вроде выглядит как определение обычного указателя на любой тип
type * имя_указателя.
по определению указатель на ф-ю принимающую type2 и возвращающую type1
- type1 (*имя указателя) (type2)
вот как его определить в этом контексте ведь получается , что возвращаемое значение type1 - int (*)(int), а принимаемое type2 -
(int,int (*ptr)(int)) , как это корректно записать ?
Я конечно понимаю ,что это вопросы на уровне сельской школы ,
но я новичок в C/C++ и если Die-Hard-у не сложно может он
объяснит мне этот вопросик.
из книг под рукой у меня только книга Подбельского "Язык C++"
P.S спасибо за ответ !
> собственно через typedef у меня это все работало. тогда это вроде выглядит как
> определение обычного указателя на любой тип
Правило номер один - всегда использовать typedef, если это облегчает читабельность.
Далее, не понятен вопрос. Вернее, не понятно, что не понятно.
Язык C совершенно однозначен в данном вопросе, правило "изнутри
наружу". То же самое, но без typedef'а, привел
justme (*) (2001-11-27 12:52:52.0)
Если мсье извращенец:), или специально пишет нечитабельные программы, то можно
делать и так.
IMHO единственная причина появления в программах подобных конструкций -
не в меру ретивый и глупый преподаватель, сочиняющий экзаменационные вопросы.
Если же вопрос был задан в целях самообразования, то
justme (*) (2001-11-27 12:52:52.0)
на него ответил, как я понимаю.
а вот про это правило "изнутри наружу" можно поподробнее ?
или где прочесть правила вывода для компилятора при разборе таких конструкций ?
мсье не извращенец ;-) преподователя по С/С++ у мсье вообще никогда не было ;-)
так что вопрос в целях самообразования.
и вообще какую хорошую книгу можно взять по C/C++ чтобы там ВСЕ было ?
а то у меня есть ISO стандарты на C/C++ я их разбираю , но что-то процесс медленновато идет :-( может есть книги потоньше и охватывающие такие же вопросы ?
Вопрос:
>и вообще какую хорошую книгу можно взять по C/C++ чтобы там ВСЕ было ?
Ответ:
>а то у меня есть ISO стандарты на C/C++ я их разбираю ,
Немого подумав, мсье поймет, что это ЕДИНСТВЕННОЕ чтиво, где есть ВСЕ.
Кстати, не поделишься стандартами как-нибудь? А то бесплатно on-line
я нашел только драфты.
Из книг я бы посоветовал Кернигана и Риччи (про С, немного
устарел синтаксис, но зато понятно написано)
а про С++, к моему удивлению, оказалась действительно почти идеально
написанная книжка, но очень толстая и на буржуинском языке:
http://www.icce.rug.nl/documents/cplusplus/
Аналогичным Кернигану-Риччи стандартом для С++ считается книжка
Страуструпа, она доступна на русском, но мне она не нравится.
IMHO мозги у Страуструпа набекрень.
> а вот про это правило "изнутри наружу" можно поподробнее ?
Первая попавшаяся online книга
(http://www.citforum.ru/programming/c/h12.shtml#1211):
Для интерпретации сложных описаний предлагается простое правило,
которое звучит как "изнутри наружу", и состоит из четырех шагов.
1. Начать с идентификатора и посмотреть вправо, есть ли квадратные
или круглые скобки.
2. Если они есть, то проинтерпретировать эту часть описателя и затем
посмотреть налево в поиске звездочки.
3. Если на любой стадии справа встретится закрывающая круглая скобка,
то вначале необходимо применить все эти правила внутри круглых скобок,
а затем продолжить интерпретацию.
4. Интерпретировать спецификатор типа.
Примеры:
int * ( * comp [10]) ();
6 5 3 1 2 4
В данном примере объявляется переменная comp (1), как массив из
десяти (2) указателей (3) на функции (4), возвращающие указатели (5)
на целые значения (6).
char * ( * ( * var ) () ) [10];
7 6 4 2 1 3 5
Переменная var (1) объявлена как указатель (2) на функцию (3)
возвращающую указатель (4) на массив (5) из 10 элементов, которые
являются указателями (6) на значения типа char.