Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/69: Рейтинг темы: голосов - 69, средняя оценка - 4.90
0 / 0 / 1
Регистрация: 29.06.2016
Сообщений: 110

Функция, возвращающая указатель на функцию

25.02.2019, 21:59. Показов 13963. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, у меня есть универсальная ф-ия, которая возвращает указатель на одну из трёх ф-ий. Каждая из тех трёх функций по-своему преобразует одномерный массив. Я не могу до конца понять, как это всё должно работать. В main() я создаю указатель на одну из трёх функций, затем вызываю универс. ф-ию, которая должна вернуть указатель на функцию. Подскажите, как это правильно реализовать и может ли вызываться другая функция, когда мы возвращаем указатель на неё из универс. ф-ии?
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
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <iomanip>
using namespace std;
 
 void *UniversalFunc(int *p_arr, int n, void *ptr)
{
    int sum = 0;
    
    for (int i = 1; i < n; i++)
        sum += p_arr[i];
 
    if (sum == p_arr[0])
        return ptr;
}
 
void Inversion(int *p_arr, int n) //одна из трёх ф-ий(остальные две подобные)
{
    int temp = n - 1;
 
    for (int i = 0; i < n/2; i++, temp--)
        swap(p_arr[i], p_arr[temp]);
}
 
int main()
{
    int size = 0;
 
    cin >> size;
 
    int *ptr_arr = new int[size];
 
    for (int i = 0; i < size; i++)
        cin >> ptr_arr[i];
 
    void(*ptr_fcn)(int*, int) = Inversion; //указатель на ф-ию
    
    UniversalFunc(ptr_arr, size, ptr_fcn); //вызов универс. ф-ии
 
    PrintArray(ptr_arr, size);
 
    delete[] ptr_arr;
 
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.02.2019, 21:59
Ответы с готовыми решениями:

Функция, возвращающая указатель на функцию
Всем привет, Мне нужно создать функцию, которая будет возвращает указатель на функцию. Я создам массив указателей на функцию, присвою...

Функция, возвращающая указатель
Добрый вечер. Требуется написать программу, содержащую структуру вида type1 *имя(type2); т.е. функцию, которая принимает аргумент типа...

Функция, возвращающая указатель
Здравствуйте. Пускай есть класс Some_type и массив такого класса. Можно ли функцией Some_type* some_name (some_type) заполнять массив,...

25
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
26.02.2019, 01:16
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Avaddon74 Посмотреть сообщение
какой размер void?
Это как? void это же ничего, пустота в чистом виде и неопределенность по совместительству. sizeof(void) вызовет отборную брань у компилятора: error: invalid application of 'sizeof' to an incomplete type 'void'.
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
26.02.2019, 07:20
valen10, Я имел ввиду void*, просто, раз мы об этом говорили, то посчитал, что меня поймут и звездочку не поставил.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
26.02.2019, 09:54
Цитата Сообщение от Avaddon74 Посмотреть сообщение
а какой размер void *?
Стандарт требует, чтобы его размер был достаточен для содержания указателя на любой тип объектов (функции - не объекты, как мы помним). Конкретных численных требований к размеру нет.
1
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
26.02.2019, 20:03
DrOffset, Допустим такая ситуация: имеем x64 ОС (например Windows 7) и 32-битное приложение. Если в нем мы выделяем память и сохраняем указатель в void*, в 32-битном приложении размер void* равен 4 байтам, означает ли это, что память системой должна выделиться в пределах этого адресного пространства (4 гигабайт) или же ОС может выделить её и за этими пределами и как-то транслировать адрес?
Я приблизительно догадываюсь как происходит, т.е. наш указатель хранит смещение в памяти относительно начала нашей программы, а наша программа может находиться в любой части памяти, но всё выделяемое в памяти место для нас должно, получается, быть в пределах 4 гигабайт? И так же с функциями? Я правильно понимаю?
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
26.02.2019, 20:20
Цитата Сообщение от Avaddon74 Посмотреть сообщение
Я правильно понимаю?
Да, примерно.

Чтобы не гадать и не просить разжевывать объемную тему на форумах, лучше почитать, например, Э.Таннебаума "Современные операционные системы". В частности параграф "Виртуальная память" в главе "Управление памятью".
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
27.02.2019, 07:13
Avaddon74,
Цитата Сообщение от DrOffset Посмотреть сообщение
Э.Таннебаума "Современные операционные системы"
еще, автор тот же, книга "Архитектура компьютера" глава 6.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.02.2019, 07:13

Функция, возвращающая указатель
Нужно написать функцию, входящие параметры которой являются указателем на структуру. Заполнить в функции структуру (не важно). Возвратить...

Функция, возвращающая умный указатель
Здравствуйте, помогите пожалуйста создать функцию, возвращающую умный указатель. Мой вариант не рабочий: class InterfaceVideo{ public:...

Функция, возвращающая указатель на структуру
Помогите пожалуйста понять в чем ошибка! Функция create должна возвращать указатель на структуру Vector #include &lt;iostream&gt; ...

Функция возвращающая указатель на int
Не могу понять ошибки. // prata 7 pt to function.cpp : Defines the entry point for the console application. // #include...

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


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru