int (*fptr[])() = {f1, f2, …};

18 05 2009

cppПисал вчера прогу по с++ к зачету.  Суть – реализация перемешанной таблицы, но речь не о том. По ходу разработки наткнулся в лекциях на вещь, красующуюся в заголовке поста. Такого я еще не видел. Признаться, я, как начинающий программист, еще многого не видел. Но над этой абракадаброй я ломал мозг в течение 2х часовой лекции плюс пару часов дома. Не то, чтобы как баран на новые ворота, но осознать полностью смысл выражения мне удалось далеко не сразу. Что сия гидра означает:

1. int fptr; – объявление  целочисленной переменной;
2.  int fptr[] = {f1, f2, …}; -объявление  и инициализация массива целых чисел;
3. int *fptr ; – объявление переменной, являющейся указателем на ячейку памяти, в которой хранится целое число;
4. int *fptr[] ; – объявление массива указателей на целые числа;
5. int fptr(); – объявление функции, возвращающей целочисленное значение в результате выполнения;
6. int (*fptr[])() = {f1, f2, …}; - вот оно. Объявление массива указателей на функции, возвращающие целочисленные значения и его инициализация указателями на функции f1, f2  и т.д.

Если подумать, все логично. Указатель на функцию – суть адрес в оперативной памяти, с которого начинаются команды, реализующие функцию. Объединить подобные указатели в массив тоже не представляет сложности, за исключением условия, что все функции должны возвращать данные одного типа. Просто догадаться до такой структуры, а тем более использовать в программе, по-моему, можно только в порыве энтузиазма.

Интересный язык, и изучать его интересно. Тяжело, конечно, но кто говорил что будет легко?! С одной стороны почти рукой подать до ассемблера, с другой  компилятор достаточно много «додумывает». Опять же такие вот «глазовыколупывательницы» попадаются. Эхх.. сдать бы экзамен еще по нему.

Писал вчера

Действия

Информация

Ответов: 4

19 05 2009
xtray

Просто догадаться до такой структуры, а тем более использовать в программе, по-моему, можно только в порыве энтузиазма.

100пудова, у кого-то случайно получилось, а потом – «хуйасе! работает ! оО»

=)))

19 05 2009
Tim0n

Это еще ничего, сегодня с коллегой по работе на эту тему разговаривал. Он говорит, на первое апреля как-то прогеры заморочились, придумали строку кода порядка 500 символов полной абракадабры без пробелов. Цель была не получить что-то осмысленное, а просто чтобы компилятор проглотил этот код. Надо будет покопаться, может найду, выложу.

30 06 2009
LG.BALUKATION

про функторы (так наша препод в своё время обзывала указатели на функции) – это одна из тех фич, которые уж больно похожи на грязный хак. Поосторожней надо с такими быть и не юзать без лишней необходимости – ведь если вдруг что-то пойдёт не так, отладка будет очень весёлым занямием +)

Кстати указатели на функции были даже в паскале, просто там они были сделаны куда очевиднее и проблем с их пониманием было меньше.

Насчёт длинных строчек – мы как-то капитально правили игруху одну, там надо было переделать скроллбар, дык мои варианты чтот дня три не нравились лиду – в итоге он написал потом это одной строчкой с кучей вложенных тернарных операторов. Жутко весело было, когда на каком-то из разрешений экрана его мега-строчка заработала криво – мы с ним посмеялись над фотами от тестеров и решили лучше всёж мою вариацию из нескольких строк заюзать, чем разгребать ту строчку и смотреть гдеж там косяк +)

1 10 2009
xtray

афтар, пешы исчо

Оставить комментарий