0 / 0 / 0
Регистрация: 13.02.2011
Сообщений: 23

Как передать функции массив в качестве аргумента?

23.04.2012, 17:19. Показов 130666. Ответов 96
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Подскажите, как передать функции массив в качестве аргумента? И как сделать, чтобы функция возвращала массив?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.04.2012, 17:19
Ответы с готовыми решениями:

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

Вызов родовой функции (нужно передать массив в качестве аргумента функции через указатель)
#include <iostream> using namespace std; template <class T1> class mas { public: T1 n; T1 a; void input() ...

Как передать функции указатель на функцию в качестве аргумента?
как передать функции указатель на функцию в качестве аргумента?

96
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
28.01.2020, 17:18
Студворк — интернет-сервис помощи студентам
Azazel-San,
Цитата Сообщение от Azazel-San Посмотреть сообщение
void Foo(int(&A)[10]);
что за синтаксис? впервые такое вижу , зачем это нужно?
0
 Аватар для alexbmd
61 / 5 / 1
Регистрация: 03.06.2013
Сообщений: 355
Записей в блоге: 3
28.01.2020, 17:32
Цитата Сообщение от zayats80888 Посмотреть сообщение
Хто?
Как передать функции массив в качестве аргумента?

Добавлено через 4 минуты
Цитата Сообщение от ReYalp Посмотреть сообщение
зачем это нужно?
чтобы размер передать
https://www.cyberforum.ru/blog... g5798.html
0
28.01.2020, 17:32

Не по теме:

Цитата Сообщение от ReYalp Посмотреть сообщение
что за синтаксис? впервые такое вижу , зачем это нужно?
а такое видел?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void*  (*Function(int) ) [10]
{
    return nullptr;
}
 
int main()
{
    typedef void * (*(*Fptr)(int) )[10];
    Fptr p = Function;
 
    void* (*a)[10] = p(0);
 
    return 0;
}
я чуть глаза с мозгами не сломал пока читал.

0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
28.01.2020, 17:36
_stanislav, тоже нет что это за синтаксис, если можно то подробнее? он используется где-то? Столько кода на С++ пересмотрел , а подобного не встречал)
0
28.01.2020, 17:40

Не по теме:

Цитата Сообщение от ReYalp Посмотреть сообщение
можно то подробнее
функция принимает int и возвращает указатель на массив из 10 указателей на void (и указатель на эту функцию соответственно). У Эккеля - Сложные определения и объявления.

0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
28.01.2020, 17:48
_stanislav,
Цитата Сообщение от _stanislav Посмотреть сообщение
void* (*Function(int) ) [10]
{
return nullptr;
}
что это такое? Похоже на создание указателя на функцию , но что тогда [10]? Это указывает что функция возвращает именно 10 элементов? и если это указатель на функцию то зачем писать тело функции?
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
28.01.2020, 17:51
ReYalp, достаточно взглянуть, например, на std::begin и там оно используется, да еще и в шаблоне.
1
28.01.2020, 17:52

Не по теме:

Цитата Сообщение от ReYalp Посмотреть сообщение
Это указывает что функция возвращает именно 10 элементов? и если это указатель на функцию то зачем писать тело функции?
это код пустой, чистый пример, просто показать что все работает. суть кода объявить указатель на функцию и вызвать функцию через указатель, nullptr это простая заглушка.

0
28.01.2020, 17:54

Не по теме:

Цитата Сообщение от ReYalp Посмотреть сообщение
впервые такое вижу
Ты посты по диагонали читаешь?

0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
28.01.2020, 17:55
_stanislav,
Цитата Сообщение от _stanislav Посмотреть сообщение
void* (*Function(int) ) [10]
но в этом же месте указатель создается? зачем ему тело если это указатель

Добавлено через 37 секунд
zayats80888,

Не по теме:

я начал с 3й страницы

0
28.01.2020, 17:56

Не по теме:

Цитата Сообщение от alexbmd Посмотреть сообщение
а в качестве аргумента это - void Foo (int (&A)[10])
сам же писал скока то постов тому назад :)

0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
28.01.2020, 17:56
alexbmd,
Цитата Сообщение от alexbmd Посмотреть сообщение
чтобы размер передать
зачем так передавать размер? разве не лучше его в отдельную переменную запихнуть и передать указатель?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
28.01.2020, 17:57
Цитата Сообщение от ReYalp Посмотреть сообщение
разве не лучше его в отдельную переменную запихнуть и передать указатель?
так в compile time размер будет передан.
1
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
28.01.2020, 18:02
_stanislav, я так до сих пор и не понял зачем указателю на функцию тело?

Добавлено через 23 секунды
точнее zayats80888,
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
28.01.2020, 18:04
Цитата Сообщение от ReYalp Посмотреть сообщение
я так до сих пор и не понял зачем указателю на функцию тело?
указатель это же просто интерфейс к чему нибудь, будь то к функции или к объекту.

Добавлено через 16 секунд
сам по себе указатель бесполезен, тупая банальная ссылка
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
28.01.2020, 18:07
_stanislav,
Цитата Сообщение от _stanislav Посмотреть сообщение
void* (*Function(int) ) [10]
{
return nullptr;
}
а что это такое вообще? Я вот совсем не могу понять , какой-то недо указатель?
0
 Аватар для zayats80888
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
28.01.2020, 18:07
Цитата Сообщение от ReYalp Посмотреть сообщение
зачем так передавать размер? разве не лучше его в отдельную переменную запихнуть и передать указатель?
Это для строгой типизации.
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
void foo(int* arr, size_t size)
{   // хреновая функция, нет контроля на этапе компиляции
    for (size_t i = 0; i < size; ++i)
        arr[i] = 0;
}
 
void foo_ptr(int (*arr)[10])
{   // криво, но пойдет
    for (size_t i = 0; i < 10; ++i)
        *arr[i] = 0;
}
 
void foo_ref(int(&arr)[10])
{   // а так уже лучше
    for (size_t i = 0; i < 10; ++i)
        arr[i] = 0;
}
 
int main() {
    int arr10[10]{};
    int arr3[3]{};
 
    foo(arr10, 10);     // ok
    foo(arr3, 10);      // ок, но во время выполнения - порча стека
 
    foo_ptr(&arr10);    // ok
    foo_ptr(&arr3);     // не скомпилируется!
 
    foo_ref(arr10);     // ok, просто, понятно, безопасно
    foo_ref(arr3);      // не скомпилируется!
}
через шаблон же можно обрабатывать массив произвольного размера
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
28.01.2020, 18:08
Цитата Сообщение от ReYalp Посмотреть сообщение
а что это такое вообще?
это функция, которая возвращает указатель на массив из 10 указателей. е мае
0
 Аватар для zayats80888
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
28.01.2020, 18:09
del
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
28.01.2020, 18:10
zayats80888, тоесть лучше писать
Цитата Сообщение от zayats80888 Посмотреть сообщение
int(&arr)[10]
чем
Цитата Сообщение от zayats80888 Посмотреть сообщение
int* arr, size_t size
? хм , спасибо

Добавлено через 31 секунду
_stanislav, если это функция зачем у нее перед именем *? и почему имя функции вообще взято в () тогда
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.01.2020, 18:10

Нюансы работы с массивами: как правильно передать массив в функцию в качестве аргумента?
Здравствуйте!!!Начал недавно изучать с++ и с по книге!!!там есть пример и возник небольшой вопрос к нему!Скину весь код, чтобы было...

Передать std::vector в качестве аргумента функции
Задание: определить моду чисел из массива. Вот код: #include &lt;iostream&gt; #include &lt;vector&gt; int mod_a(int, vector&lt;int&gt;); ...

Как передать массив структур в функцию в качестве параметра, чтобы изменения в функции меняли исходный массив?
Допустим есть структура struct Base { int a; int b; int c; }; В основном методе main() объявим массив...

Как передать функцию в качестве аргумента?
Как передать функцию в функцию, выполняющую усреднение значения через интегрирование. Так как интегрировать придется много, хочу создать...

Передача функции в качестве аргумента массив
Помогите пожалуйста! есть некая рекурсивная функция N которая принимает 2 целочисленные переменные и массив; void N(int, int,...


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

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

Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru