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

Вернуть массив из функции

15.04.2024, 22:20. Показов 2798. Ответов 31

Студворк — интернет-сервис помощи студентам
Очень все запутанно и непонятно, уже 3 дня не могу понять в чем ошибка и как решить, кого не спрошу на всяких форумах, все говорят блин чел подумай надо ли тебе это и не пытаются ничего объяснить. Я никак не могу массив вернуть через return, в данном коде у меня вроде бы получилось вернуть... Но то ли он возвращает, в интернете написано что таким образом он сохраняет ссылку на первый элемент массива, а мне не надо 1 элемент массива, мне надо весь. А самое главное, что я не могу указать номер элемента в массиве, мне пишет про какие то указатели, а я ниче не понимаю уже, запутался с ссылками этими. (скрин с ошибкой ниже). Кратко: Надо массив вернуть полностью и иметь доступ ко всем его файлам, а еще чтобы данные копировались, а не меняли массив по ссылке.


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 looting() //Подбирает рандомные числа для характеристики собранных предметов
{
 
   /*
    this_thread::sleep_for(chrono::milliseconds(5));
    srand(time(NULL));
    int RandomNum = rand() % 10 + 5;
    cout << RandomNum << endl;
   */
 
    class Pot
    {
        int Gen[5] = { X,X,X,X,X }; //тут числа если что, просто через enum сделано
    public:
        int GetData()
        {
            int &gen = *Gen;
            return gen;
        }
    };
 
    Pot _pot;
 
    int Pot = _pot.GetData();
 
    for (int i = 0; i < 5; i++)
    {
        cout << "Число: " << Pot[i] << " " << endl;
    }
 
}
Миниатюры
Вернуть массив из функции  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.04.2024, 22:20
Ответы с готовыми решениями:

Вернуть из функции массив, после чего удалить в функции
Извините за возможно непонятную тему ) Есть функция, в которой создаётся динамический массив char, и возвращает его, после...

Вернуть массив из функции
Допустим есть класс Test: class Test { private: float point; };

Вернуть массив из функции
Помогите пожалуйста, не получается вернуть массив #include &lt;iostream&gt; using namespace std; int input (int*array2) { int n; ...

31
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
16.04.2024, 16:01
Студворк — интернет-сервис помощи студентам
C++
1
2
[quote="zayats80888;17278799"]std::array<int, 5> foo() {
    return {1, 2, 3, 4, 5};[/quote]
а вот вопрос
когда возвращается массив таким образом - он возвращается по ссылке или копия на массив возвращается?
0
Модератор
Эксперт С++
 Аватар для zss
13789 / 10981 / 6492
Регистрация: 18.12.2011
Сообщений: 29,281
16.04.2024, 16:28
Цитата Сообщение от pup_kin Посмотреть сообщение
или копия
Конечно, копия.
Для ссылки надо возвращать
C++
1
std::array<int, 5>&
1
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
16.04.2024, 20:23
Цитата Сообщение от zss Посмотреть сообщение
Конечно, копия.
а как написать вместо
C++
1
2
3
4
std::array<int, 5>& foo_1() {
    std::array<int, 5> arr = { 1, 2, 3, 4, 5 };
    return arr;
}
как не создавая переменную
как-то может через new можно написать
можно ли написать return и вызвать какой - либо конструктор типа std::array<int, 5> без создания переменной явно, я понимаю что она и так создасться, но хочу одной строчкой?

C++
1
2
3
4
std::array<int, 5>& foo_3() {
    return  new std::array<int, 5> { 1, 2, 3, 4, 5 };
    return static_cast<std::array<int, 5>&>{ 1, 2, 3, 4, 5 };
}
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
16.04.2024, 21:41
Цитата Сообщение от pup_kin Посмотреть сообщение
std::array<int, 5> arr = { 1, 2, 3, 4, 5 };
Этот объект является временным и перестанет существовать после возврата из функции.
Цитата Сообщение от pup_kin Посмотреть сообщение
std::array<int, 5>& foo_1() {
Возвращать ссылку на временный объект -- не можно.
Но.
Можно вернуть сам объект. По значению.
Синтаксически вот так:
C++
1
2
3
std::array<int, 5> foo_3() {
    return { 1, 2, 3, 4, 5 }; // это типа список инициализации. компилятор сам додумает, какой тип мы хотим вернуть по типу возвращаемого значения функции.
}
0
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
16.04.2024, 22:55
Цитата Сообщение от lemegeton Посмотреть сообщение
Этот объект является временным и перестанет существовать после возврата из функции.
я тоже так думал,
но оно работает на удивление

если просто пишу
C++
1
2
3
4
5
int* foo_3()
{
    int arr[5] = { 5,6,7,8,9 };
    return arr;
}
то этот массив уничтожается,
а вот если через std::array

C++
1
2
3
4
std::array<int, 5>& foo_1() {
    std::array<int, 5> arr = { 1, 2, 3, 4, 5 };
    return arr;
}
то все нормально.
никогда ранее не использовал std::array - удобная штука получается.
спс
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
16.04.2024, 23:11
Цитата Сообщение от pup_kin Посмотреть сообщение
то все нормально.
Нет, не нормально.
Просто на том месте, остались ещё незатертые данные.
Но их там уже нет.
1
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
16.04.2024, 23:46
Цитата Сообщение от pup_kin Посмотреть сообщение
то все нормально.
Не нормально. Вам просто повезло. )
Это как продать тачку, а потом на ней кататься. Раньше или позже вам за это прилетит.
1
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
17.04.2024, 00:16
Цитата Сообщение от SmallEvil Посмотреть сообщение
Нет, не нормально.
Просто на том месте, остались ещё незатертые данные.
Но их там уже нет.
я проверял в цикле многажды выделал, создавал.

другие операции делал.

но вообще странно, сам этого не ожидал и не должно быть такого, поскольку область видимости.

ну значит ошибка с моей стороны, а то вот обрадовался думаю - блин чудо чудесное std::array
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
17.04.2024, 00:34
Цитата Сообщение от pup_kin Посмотреть сообщение
чудо чудесное std::array
Нельзя возвращать ссылки/указатели на локальные объекты и все тут, даже на временные.
И ничего не поделать.
UB будет, и вот даже может что-то как-то работать...
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
17.04.2024, 01:18
Цитата Сообщение от pup_kin Посмотреть сообщение
я проверял в цикле многажды выделал, создавал.
другие операции делал.
Вам просто повезло.
То, что у вас что-то работает, являясь UB совершенно не означает, что так будет всегда и так будет у других.
0
Нарушитель
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,218
17.04.2024, 14:03
0
17.04.2024, 14:06

Не по теме:

Наталья8, садись, 5. Домашку сделал :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.04.2024, 14:06

Вернуть двумерный массив из функции
Здравствуйте. Не так давно работаю с C++, поэтому очень нужна помощь. Есть такая функция: void GTS::FM(unsigned long long int **MI,...

Как вернуть массив из функции?
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int mass(int n) { int* Mass = new int; //здесь...

Вернуть массив TCHAR из функции
Как правильно вернуть массив символов TCHAR, из функции. LPTSTR diskInfo::getDiskType(unsigned short Ndisk) { TCHAR szBuf =...

Вернуть двумерный массив их функции
допустим есть в функции двумерный массив int** foo(){ int a; return // a; } как его собственно вернуть? чтобы...

Как вернуть массив из функции?
int dayTransfer(string date) // 22.2.2222 { //stringstream is(date); string day, month, year; for (int i = 0, k = 0; i &lt;...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru