9 / 9 / 4
Регистрация: 19.05.2013
Сообщений: 63
1

Возвращение массива из функции

29.05.2016, 02:59. Показов 1340. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Почему такой код выводит массив корректно.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int* Input()
{
    int b[3] = { 10,20,30 };
    return b;
}
 
int main()
{
    setlocale(LC_ALL, "RUS");
    
    int *ar;
    ar = Input();
    cout << ar[0] << endl << ar[1] << endl << ar[2];
    _getch();
    return 0;
}
А такой нет?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int* Input()
{
    int b[3] = { 10,20,30 };
    return b;
}
 
int main()
{
    setlocale(LC_ALL, "RUS");
    
    int *ar;
    ar = Input();
    cout << ar[0] << endl;
    cout << ar[1] << endl;
    cout << ar[2] << endl;
    _getch();
    return 0;
}
Отличие только в
C++
1
2
3
cout << ar[0] << endl;
cout << ar[1] << endl;
cout << ar[2] << endl;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2016, 02:59
Ответы с готовыми решениями:

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

Возвращение массива из функции
Нужно вернуть массив типа int из функции Как я понимаю сделать это можно только с помощью...

Возвращение массива из функции
Как вернуть массив из функции? double* Zapolnenie(string Name) { if (Name == &quot;A&quot;) { const...

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

4
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,687
29.05.2016, 07:44 2
НЕЛЬЗЯ возвращать указатель на локальные переменные.
Они не сохраняются после выхода из функции.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int* Input()
{
    int b=new int[3];
    b[0]= 10,b[1]=20,b[2]=30;
    return b;
}
 
int main()
{
    setlocale(LC_ALL, "RUS");
    
    int *ar;
    ar = Input();
    cout << ar[0] << endl << ar[1] << endl << ar[2];
    delete[] ar;
    _getch();
    return 0;
}
В первом случае просто повезло - переменные не успели попортиться.
А во втором - повторный вызов operator<< их затер
1
9 / 9 / 4
Регистрация: 19.05.2013
Сообщений: 63
29.05.2016, 08:59  [ТС] 3
Спасибо! работает

C++
1
int b=new int[3];
Только здесь Вы пропустили * перед b

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

Я понимаю что менять массивы можно и просто используя массив как аргумент в функции и он поменяется во всем коде.
Но если говорить просто про возврат? Допустим я не хочу чтоб моя функции принимала какие либо аргументы? Возможно ли вернуть полный массив и как это правильно записать?
0
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
29.05.2016, 09:16 4
Можешь возвращать массив внутри структуры, если он не слишком большой, или использовать std::vector.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
29.05.2016, 11:55 5
Цитата Сообщение от Mostick Посмотреть сообщение
Почему такой код выводит массив корректно.
по завершению работы функции
локальные переменные этой функции умирают.
они больше не действительны.
но какое то время содержимое памяти
ещё может сохранять своё последнее прижизненное значение.

в вашем случае звезды сошлись на небе так,
что подохший в функции массив ещё не успел протухнуть.

во втором случае - протухает.

Цитата Сообщение от zss Посмотреть сообщение
В первом случае просто повезло - переменные не успели попортиться.
не повезло.

повезло - это если сразу упала, и ошибку обнаружили.
2
29.05.2016, 11:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2016, 11:55
Помогаю со студенческими работами здесь

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

Возвращение массива из функции-шаблона
Есть массив int iArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; есть шаблон функция ...

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

Возвращение двумерного массива из функции
int function (int x, const int r, const int c) //работает только если указана размерность массива x...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru