реклама на сайте
подробности

 
 
> Функция, которая возвращает указатель на саму себя, как описАть?
Александр Куличо...
сообщение Apr 10 2007, 12:25
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 6-03-06
Из: Украина, г. Винница
Пользователь №: 15 017



Как в С описать функцию, которая возвращает указатель на функцию, себе подобную (на саму себя)?

В Делфи, например, можно сначала описАть указатель на тип, а потом описать уже сам тип:
type
PFunc = ^TFunc;
TFunc = function(X: Integer): PFunc;

Позволяет ли подобное С и как это реализуется?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
xemul
сообщение Apr 10 2007, 13:15
Сообщение #2



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



"То бензин, а то дети..." (это я про Дельфи и Сиsmile.gif)
Товарищу, вероятно, просто пример нужен.
Вы, уважаемый zltigo, уже как-то постили простенькую расталдычку для начинающих про указатели и скобки - ссылку на нее прибить бы вверху всех форумов, где потенциально могут спрашивать про Сиsmile.gif.

Функция, ничего не получающая и не возвращающая:
void foo(void);

Указатель на функцию, ничего не получающую и не возвращающую:
void (void)* fptr;

Функция, получающая указатель на функцию, ничего не получающую и ничего не возвращающую, и его же возвращающая:
void (void)* foo(void (void)*);

Соответственно, имплементация
void (void)* foo(void (void)* fptr)
{
return fptr;
}

Как не сложно заметить, действо это совершенно бессмысленное (достаточно просто объявить переменную типа "указатель на функцию" и присвоить ей значение указателя на требуемую функцию без дополнительных телодвижений в виде функции, возвращающей указатель), что и вызвало недоумение уважаемого zltigo.

UPD:
т.е. достаточно:
void foo(void);
void (void)* fptr;

fptr = &foo;
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 08:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016