Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / В C/C++ создать рекурсивную функцию, одним из параметров принимающую указатель на себя? / 9 сообщений из 9, страница 1 из 1
04.06.2013, 17:25
    #38285550
В C/C++ создать рекурсивную функцию, одним из параметров принимающую указатель на себя?
А можно в C/C++ написать рекурсивную функцию, одним из параметров принимающую указатель на саму себя? Или на другую функцию такого же типа?

Такой вариант естественно не прокатывает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
typedef void (*T)(T);

void func(T ptr) {}

int main() {
    T ptr = &func;
    
    return 0;
}




Ну а без рекурсии естественно работает.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
typedef void (*T)();

void func() {}

int main() {
    T ptr = &func;
    
    return 0;
}
...
Рейтинг: 0 / 0
04.06.2013, 17:28
    #38285555
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В C/C++ создать рекурсивную функцию, одним из параметров принимающую указатель на себя?
указатель на саму себя,

Рекурсивная функция - это другое
...
Рейтинг: 0 / 0
04.06.2013, 17:49
    #38285573
В C/C++ создать рекурсивную функцию, одним из параметров принимающую указатель на себя?
Anatoly Moskovskyуказатель на саму себя,

Рекурсивная функция - это другое
Ну вы поняли смысл :)

Теперь она точно рекурсивная:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
typedef void (*T)(T);

void func(T ptr) { ptr(&func); }

int main() {
    T ptr = &func;
    
    return 0;
}



Вопрос может ли вообще функция принимать в параметрах указатель на саму себя?
...
Рейтинг: 0 / 0
04.06.2013, 17:52
    #38285574
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В C/C++ создать рекурсивную функцию, одним из параметров принимающую указатель на себя?
указатель на саму себяможет ли вообще функция принимать в параметрах указатель на
саму себя?
Функция может принимать в параметрах указатель на любую функцию с заданной сигнатурой.
Включая, естественно, себя если её сигнатура соответствует заданной.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.06.2013, 17:53
    #38285577
В C/C++ создать рекурсивную функцию, одним из параметров принимающую указатель на себя?
Dimitry Sibiryakovуказатель на саму себяможет ли вообще функция принимать в параметрах указатель на
саму себя?
Функция может принимать в параметрах указатель на любую функцию с заданной сигнатурой.
Включая, естественно, себя если её сигнатура соответствует заданной.

Приведите пожалуйста пример кода, как это сделать :)
...
Рейтинг: 0 / 0
04.06.2013, 18:01
    #38285588
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В C/C++ создать рекурсивную функцию, одним из параметров принимающую указатель на себя?
указатель на саму себяПриведите пожалуйста пример кода, как это сделать :)

Ну например так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
typedef void (*f_p)(void (*)());

void func(f_p f)
{
  // here
}

int main()
{
   func((f_p)func);
}


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.06.2013, 18:08
    #38285595
В C/C++ создать рекурсивную функцию, одним из параметров принимающую указатель на себя?
Dimitry Sibiryakovуказатель на саму себяПриведите пожалуйста пример кода, как это сделать :)

Ну например так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
typedef void (*f_p)(void (*)());

void func(f_p f)
{
  // here
}

int main()
{
   func((f_p)func);
}



Спасибо! А вызвать то её теперь как? :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
typedef void (*f_p)(void (*)());

int k = 0;

void func(f_p f)
{
    if(++k < 10) f((f_p)func);
}

int main()
{
   func((f_p)func);
}
...
Рейтинг: 0 / 0
04.06.2013, 18:15
    #38285605
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В C/C++ создать рекурсивную функцию, одним из параметров принимающую указатель на себя?
указатель на саму себяА вызвать то её теперь как? :)
Например так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
typedef void (*f_t)();
typedef void (*f_p)(f_t);

void func(f_p f)
{
  f((f_t)func);
}

int main()
{
   func((f_p)func);
}


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.06.2013, 18:39
    #38285630
В C/C++ создать рекурсивную функцию, одним из параметров принимающую указатель на себя?
Dimitry Sibiryakovуказатель на саму себяА вызвать то её теперь как? :)
Например так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
typedef void (*f_t)();
typedef void (*f_p)(f_t);

void func(f_p f)
{
  f((f_t)func);
}

int main()
{
   func((f_p)func);
}



Спасибо, работает.
Интересный финт конечно :)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / В C/C++ создать рекурсивную функцию, одним из параметров принимающую указатель на себя? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]