crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Хитрое объявление указателей в Си
Iron Bug
  опции профиля:
сообщение 30.6.2011, 6:30
Сообщение #11


Профессионал
*****

Группа: Модератор
Сообщений: 1587
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 218 раз(а)




Репутация:   12  


Цитата(Litkevich Yuriy @ 30.6.2011, 7:42) *
Может список пополнить ещё какими-то родственными объявлениями, кто что помнит?

разве что указатели на функции и массивы функций добавить.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 30.6.2011, 13:27
Сообщение #12


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9655
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Iron Bug @ 30.6.2011, 9:30) *
и массивы функций
чёт мне даже в голову не приходило, что и такое может быть :)
Приведи примеры пожалуйста.

Ещё не помешали бы примеры типа как в первом посте, но смесь указателей и ссылок (из реальной жизни).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 30.6.2011, 13:31
Сообщение #13


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9655
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Iron Bug @ 30.6.2011, 9:30) *
и массивы функций
чёт мне даже в голову не приходило, что и такое может быть :)
Приведи примеры пожалуйста.

Ещё не помешали бы примеры типа как в первом посте, но смесь указателей и ссылок (из реальной жизни).
Причина редактирования: Opera 11.50, Ctrl + Enter = bug
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 30.6.2011, 17:50
Сообщение #14


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Техника, известная как «Чтение по спирали/по часовой стрелке» (“Clockwise/Spiral Rule”) позволяет любому программисту разобрать любое объявление языка Си - http://habrahabr.ru/blogs/cpp/100104/
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 30.6.2011, 19:10
Сообщение #15


Профессионал
*****

Группа: Модератор
Сообщений: 1587
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 218 раз(а)




Репутация:   12  


Цитата(Litkevich Yuriy @ 30.6.2011, 16:31) *
чёт мне даже в голову не приходило, что и такое может быть

  int (*foo)(char bar);

указатель на функцию, возвращающую int, с параметром char

int (*foo[])(char bar) = { foo1, foo2 };

массив указателей на функции, возвращающие int, с параметром char

int (*(*foo)[])(char bar);

указатель на массив указателей на функции, возвращающие int, с параметром char

ну и так далее, вариантов много. всякие там const по необходимости добавляются точно так же, как описано выше.

P.S. блин, аж сама запуталась, правила пару раз :)

Сообщение отредактировал Iron Bug - 1.7.2011, 7:09
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.7.2011, 6:01
Сообщение #16


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9655
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Kagami @ 30.6.2011, 20:50) *
Техника, известная как «Чтение по спирали/по часовой стрелке» (”Clockwise/Spiral Rule”) позволяет любому программисту разобрать любое объявление языка Си - http://habrahabr.ru/blogs/cpp/100104/
нашёл там в комментариях интересную штуку, объясняет объявление. только нужно писать так:
int (*foo)(char)
вместо
int (*foo)(char bar)


Объявление из первого сообщения:
const char * const * const listnames[]
declare listnames as array of const pointer to const pointer to const char
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 1.7.2011, 7:11
Сообщение #17


Профессионал
*****

Группа: Модератор
Сообщений: 1587
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 218 раз(а)




Репутация:   12  


Цитата(Litkevich Yuriy @ 1.7.2011, 8:01) *
только нужно писать так:
int (*foo)(char)
вместо
int (*foo)(char bar)

без разницы. компилятор всё равно отбрасывает имя переменной в декларации. зато вот у подсказок будет дополнительная информация в виде названия, в котором обычно поясняется назначение переменной. когда смотришь на заголовочник, типы параметров ни о чём не говорят. когда видишь названия переменных - сразу всё становится понятно.

Сообщение отредактировал Iron Bug - 1.7.2011, 7:12
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 1.7.2011, 19:59
Сообщение #18


фрилансер
******

Группа: Участник
Сообщений: 2885
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата
P.S. блин, аж сама запуталась, правила пару раз


для того и придумали его величество typedef )))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.8.2019, 18:56