Форум программистов, компьютерный форум CyberForum.ru

Указатель на функцию - C++

Восстановить пароль Регистрация
 
IIIYT
0 / 0 / 0
Регистрация: 29.03.2014
Сообщений: 4
29.03.2014, 09:15     Указатель на функцию #1
Здравствуйте!
Есть вот такой элемент кода:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SimpleCat* FunctionTwo (SimpleCat * theCat);
int main()
{
    ....................
    SimpleCat Frisky;
    ......................
    FunctionTwo (&Frisky);
    ......................
}
 
SimpleCat* FunctionTwo (SimpleCat *theCat)
{
    ...........................................
    return theCat;
}
Не могли бы разъяснить SimpleCat* Function (SimpleCat *theCat). Что это? Указатель на функцию?
Просто допустим, если бы была вот такая запись, я бы понял:
C++
1
2
SimpleCat FunctionTwo (SimpleCat *theCat);
SimpleCat * pFunc2 = FunctionTwo (SimpleCat *theCat);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2014, 09:15     Указатель на функцию
Посмотрите здесь:

Указатель на указатель на функцию C++
Как передать указатель на функцию в функцию C++
C++ В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель
Зачем передавать в функцию X указатель на callback функцию, если последняя ВНЕШНЯЯ и вызовется БЕЗО ВСЯКОГО УКАЗАТЕЛЯ? C++
Работа с файлом (передать указатель на файл в функцию, вернуть указатель на файл из функции) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
29.03.2014, 09:25     Указатель на функцию #2
Это прототип. Если бы вы пропустили первую строку Вашего кода (удалили прототип), была бы ошибка компиляции при обращении к этой функции т.к. main() не знал бы по каким правилам обращаться к этой функции, а прототип это ему сообщает.

Не по теме:

В разделе с++ сегодня была преодолена отметка в более 900 000 ответов. Круто.

IIIYT
0 / 0 / 0
Регистрация: 29.03.2014
Сообщений: 4
29.03.2014, 09:34  [ТС]     Указатель на функцию #3
Нет, то что объявляется прототип я понимаю. Видимо я неясно выразил свой вопрос.
Мне неясен синтаксис этой строки:
C++
1
SimpleCat* FunctionTwo (Simple *theCat);
Например, мне ясно, что указатель в параметре, работает так, если бы его прописали в следующем виде:
C++
1
SimpleCat *theCat = &Frisky; // (ориентируясь на код в первом посте)
А вот прототип мне не понятен. Точнее мне не ясно, если FunctionTwo - это указатель, то на что он указывает? И может ли функция быть указателем? Или в этом коде что-то пропущено, по причине очевидности, которая мне не ясна?

P.S. Этот код из учебника.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
29.03.2014, 10:08     Указатель на функцию #4
Цитата Сообщение от IIIYT Посмотреть сообщение
Точнее мне не ясно, если FunctionTwo - это указатель, то на что он указывает?
какой указатель? Это объявление функции.
Если убрать эту строчку, то когда компилятор дойдет до строчки
C++
1
FunctionTwo (&Frisky);
о функции FunctionTwo он ничего еще не знает и будет ошибка компиляции.
а добавив прототип функции:
C++
1
SimpleCat* FunctionTwo (SimpleCat * theCat);
Вы указываете компилятору, что такая функция есть, принимает она такие то параметры и возвращает такие и звать её вот так, так что мол если встретишь - не ругайся, она просто лежит где-то в другом месте, компоновщик разберется без тебя.

Добавлено через 2 минуты
можете просто переставить функции местами:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//SimpleCat* FunctionTwo (SimpleCat * theCat);
SimpleCat* FunctionTwo (SimpleCat *theCat)
{
    //...........................................
    return theCat;
}
 
int main()
{
    //....................
    SimpleCat Frisky;
    //......................
    FunctionTwo (&Frisky);
    //......................
}
IIIYT
0 / 0 / 0
Регистрация: 29.03.2014
Сообщений: 4
29.03.2014, 10:10  [ТС]     Указатель на функцию #5
Спасибо за ответы. Про прототипы и работу функций я уже давно выучил и это трудностей не вызывает. Но меня смущает вот этот символ в конце типа функции "*". Что он означает в данном случае?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
29.03.2014, 10:16     Указатель на функцию #6
Цитата Сообщение от IIIYT Посмотреть сообщение
Что он означает в данном случае?
то что функция возвращает указатель на такой-то тип. Указатели, надеюсь, учили?

Не по теме:

SimpleCat... хм, а не из учебника ли Либерти это?

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2014, 10:28     Указатель на функцию
Еще ссылки по теме:

Передать в неуправляемую функцию указатель на указатель C++
Функция, получающая указатель на обычную функцию, получает указатель на метод класса C++
C++ Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
IIIYT
0 / 0 / 0
Регистрация: 29.03.2014
Сообщений: 4
29.03.2014, 10:28  [ТС]     Указатель на функцию #7
Да, именно из него. =-)
Указатели вроде прошел. Но про возвращающий тип в виде указателя что-то не отложилось видимо, пойду пересмотрю.
Спасибо за ответ!
Yandex
Объявления
29.03.2014, 10:28     Указатель на функцию
Ответ Создать тему
Опции темы

Текущее время: 09:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru