Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 02.08.2014
Сообщений: 90
1

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

03.04.2015, 19:28. Просмотров 1520. Ответов 8
Метки нет (Все метки)

Изучаю c++ по одной книжке.Она говорить не умеет..
Так вот понадобилось написать функцию,которая как параметр получает указатель на функцию и возвращает указатель на эту функцию а эта функция в свою очередь возвращает указатель на массив.
Примерный но неправильный код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;
 
 
 
long ia[10];
 
long (*mk())[10]
{
    return &ia;
}
 
long ()[10](*calc(long *a()) //просто не знал как правильно описать тип
{
 
    return a();
}
 
 
int main(int argc,char **argv)
{
 
    for(long i=0;i<=9;i++)
        ia[i]=i;
    long (*p)[10]=calc();
 
    for(long i=0;i<=9;i++)
        cout<<endl<<(*p)[i];
 
    return 0;
}
Знаю что бред и масло масленное.Но в целях обучения...Блин не люблю я все эти указатели.
Короче надо это понять.Заранее спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2015, 19:28
Ответы с готовыми решениями:

Указатель на функцию, которая возвращает массив
Данная программа делает следующее: 1) просит ввести пользователя целое число в пределе 1-50...

Можно ли в C++ определить функцию, которая возвращает указатель на функцию с той же сигнатурой?
Вопрос такой, а можно ли в C++ определить функцию, которая возвращает указатель на эту же функцию,...

Указатель на функцию, которая принимает в качестве параметра указатель на массив
я не понимаю. вроде делаю правильно, но выходит ошибка. есть функция. int foo(int *mas){};...

Указатель на функцию возвращающую указатель
Всем привет. Подскажите, пожалуйста, пример не очень сложной программы, в которой встречается...

8
2821 / 1630 / 252
Регистрация: 03.12.2007
Сообщений: 4,222
03.04.2015, 19:52 2
Лучший ответ Сообщение было отмечено Ed_Os как решение

Решение

C++
1
int (*foo(int (*bar())[10]))[10]
0
0 / 0 / 0
Регистрация: 02.08.2014
Сообщений: 90
03.04.2015, 22:08  [ТС] 3
Так ну уже ближе...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;
 
 
 
long ia[10];
 
long (*mk())[10]
{
    return &ia;
}
 
int (*calc(int (*a())[10]))[10]//ЗАМЕНИЛ
{
 
    return a();
}
 
 
int main(int argc,char **argv)
{
 
    for(long i=0;i<=9;i++)
        ia[i]=i;
    long (*p)[10]=calc(mk);//Как параметр подставить правильно?
 
    for(long i=0;i<=9;i++)
        cout<<endl<<(*p)[i];
 
    return 0;
}
Добавлено через 2 часа 9 минут
Дошло всё.Его парило несоответсвие типов.
Просто оставлю это здесь.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;
 
 
 
int ia[10];
 
int (*mk())[10]
{
    return &ia;
}
 
int (*calc(int (*a())[10]))[10]
{
    return a();
}
 
 
int main(int argc,char **argv)
{
 
    for(long i=0;i<=9;i++)
        ia[i]=i;
 
    int (*p)[10]=calc(mk);
 
    for(long i=0;i<=9;i++)
        cout<<endl<<(*p)[i];
 
    return 0;
}
0
2821 / 1630 / 252
Регистрация: 03.12.2007
Сообщений: 4,222
03.04.2015, 22:12 4
C++
1
2
calc(mk) // можно и так
calc(&mk) // и так, если совсем дословно
0
0 / 0 / 0
Регистрация: 02.08.2014
Сообщений: 90
03.04.2015, 22:52  [ТС] 5
ну это да.Но насколько я знаю необязательно.
0
Форумчанин
Эксперт CЭксперт С++
8161 / 5009 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
03.04.2015, 23:59 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <functional>
#include <iostream>
 
int* foo1()
{
    return new int[42];
}
 
std::function<int *(void)> foo2()
{
    return foo1;
}
 
std::function<std::function<int *(void)>(void)> foo3()
{
    return foo2;
}
 
int main()
{
    int *arr = foo3()()();
    delete[] arr;
}
Добавлено через 1 минуту
Тут ещё много бреда на эту тему.
0
0 / 0 / 0
Регистрация: 02.08.2014
Сообщений: 90
04.04.2015, 15:27  [ТС] 7
Ну я учусь без библиотек.Но за бред спасибо)Кстати вот почему в этой строке(мой код)
C++
1
int (*p)[10]=calc(mk);
Мне не нужно указывать параметров для функции которую я возвращаю?Типо
C++
1
int (*p)[10]=calc(mk)();
??
0
Форумчанин
Эксперт CЭксперт С++
8161 / 5009 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
04.04.2015, 16:24 8
Цитата Сообщение от Ed_Os Посмотреть сообщение
Мне не нужно указывать параметров для функции которую я возвращаю?Типо
calc - функция, mk - её аргумент. Функция принимает аргументы в одних круглых скобках.
0
0 / 0 / 0
Регистрация: 02.08.2014
Сообщений: 90
04.04.2015, 17:14  [ТС] 9
Нет я не это имел ввиду.Ведь эта функция возвращает(ну или должна) функцию которая в итоге считает массив.
хотя теперь мне кажется тот код неверен...Короче calc должно вернуть функцию а ведь ей нужны скобки?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2015, 17:14

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Написать функцию принимающую массив и возвращающую указатель на динамический массив
Написать функцию принимающую массив и возвращающую указатель на динамический массив содержащий...

Написать и протестировать функцию, которая возвращает указатель на новый прямоугольник
Определить структуру, описывает прямоугольник со сторонами, параллельными осям координат...

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

Написать функцию, которая возвращает указатель на первое вхождение подстроки string2 в строке string1
char* strstr(char* string1, char* string2) Возвращает указатель на первое вхождение подстроки...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.