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

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

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

Изучаю c++ по одной книжке.Она говорить не умеет..
Так вот понадобилось написать функцию,которая как параметр получает указатель на функцию и возвращает указатель на эту функцию а эта функция в свою очередь возвращает указатель на массив.
http://www.cyberforum.ru/cpp-beginners/thread2173517.html
Примерный но неправильный код:
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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2015, 19:28
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив) (C++):

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

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

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

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

Разработать и испытать функцию, которая переворачивает строку и возвращает указатель на перевёрнутую строку
Разработать и испытать функцию, которая переворачивает строку и возвращает...

8
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
03.04.2015, 19:52 #2
Лучший ответ Сообщение было отмечено Ed_Os как решение

Решение

C++
1
int (*foo(int (*bar())[10]))[10]
0
Ed_Os
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
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
03.04.2015, 22:12 #4
C++
1
2
calc(mk) // можно и так
calc(&mk) // и так, если совсем дословно
0
Ed_Os
0 / 0 / 0
Регистрация: 02.08.2014
Сообщений: 90
03.04.2015, 22:52  [ТС] #5
ну это да.Но насколько я знаю необязательно.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7980 / 4861 / 1422
Регистрация: 29.11.2010
Сообщений: 13,235
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
Ed_Os
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
MrGluck
Модератор
Эксперт CЭксперт С++
7980 / 4861 / 1422
Регистрация: 29.11.2010
Сообщений: 13,235
04.04.2015, 16:24 #8
Цитата Сообщение от Ed_Os Посмотреть сообщение
Мне не нужно указывать параметров для функции которую я возвращаю?Типо
calc - функция, mk - её аргумент. Функция принимает аргументы в одних круглых скобках.
0
Ed_Os
0 / 0 / 0
Регистрация: 02.08.2014
Сообщений: 90
04.04.2015, 17:14  [ТС] #9
Нет я не это имел ввиду.Ведь эта функция возвращает(ну или должна) функцию которая в итоге считает массив.
хотя теперь мне кажется тот код неверен...Короче calc должно вернуть функцию а ведь ей нужны скобки?
0
04.04.2015, 17:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2015, 17:14
Привет! Вот еще темы с решениями:

Реализовать функцию, возвращающую указатель на наименьший элемент матрицы
Пожалуйста, помогите написать программу на массив Написать программу с...

Реализовать 3 функции, каждая из которых принимает указатель на массив и количество элементов и возвращает указатель на новый массив.
Пишу в Microsoft Visual Studio -&gt;Win32 Console application -&gt;C++....

Написать функцию, которая принимает указатель на небольшой 2х мерный массив int значениями
Подскажите пожалуйста, надо написать функцию, которая принимает указатель на...

В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель
Друзья! Всем привет. Вот код: class otets { public: void f (void...


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

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

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