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

243
12 ноября 2017, 17:09

Есть код. В функции double f(double x[], int n) делается вычисление нескольких функций с несколькими переменными. Несколько переменных мы передадим в виде массива double x[], int n - количество элементов массива; к примеру, пусть будут вычислятся две функции - я их решил записать в массив double g[n], так как мне надо, что бы функция возвращала оба вычисления функции: g[0] = x[0] + x[1]; g[1] = x[0] * x[1]. Как вернуть массив g[n], и каким быть должно обращение к функции (в примере кода сразу в функции memcpy)? Что не так, поправьте. Пример кода.

#include <iostream>
using namespace std;
double f(double x[], int n) 
{
    double g[n];
    g[0] = x[0] + x[1];
    g[1] = x[0] * x[1];
    return /* Что? */;
}
main() 
{
    int n = 2;
    double a[2], b[2];
    for (int i = 0; i < n; i++)
    {
        cout << " a[" << i << "] = ";
        cin >> a[i];
    }
    memcpy(b, f(a, n), sizeof(a));
    for (int i = 0; i < n; i++) cout << " b[" << i << "] = " << b[i];
    return 0;
}

Answer 1

Возвращать массив как таковой нельзя. Можно вернуть указатель на него - но тогда массив не должен быть локальной переменной! (Кстати, в C++ нельзя объявлять массив с размером, неизвестным во время компиляции.)

Поэтому нужно иначе..

Выделить массив динамически, и вернуть (только потом не забыть освободить память!)

int * g = new int[n];
...
return g;

Использовать, скажем, вектор (наилучший вариант):

std::vector<int> g(n);
...
return g;

Можно обернуть массив в структуру, но опять же, нужно знать размер во время компиляции:

struct Array {
    int g[10];
}
...
Array f()
{
    Array g;
    g.g[0] = 5;
    ...
    return g;
}

Но лучше всего - использовать готовый вектор, тем более что у вас количество элементов заранее не известно, так что std::array<> вам не подойдет.

PS Ну и, конечно, вариант с передачей возвращаемого массива в функцию:

int g[10];
... f(..., int* g)
{
    // работа с g[i]
    ...
}
...
f(...,g);
READ ALSO
Как сделать шрифт в Qpainter больше

Как сделать шрифт в Qpainter больше

Делаю генератор мемов и хочу сделать нормальный текст а шрифт получается маленьким как его сделать большим?Я добавил spinBoX и собираюсь в нем...

293
События jQuery( анимация бургер меню)

События jQuery( анимация бургер меню)

Есть код, который плавно меняет значение свойства, нужно чтобы при втором нажатии на элемент значение менялось !!! вот моя попытка, но получеться...

248
Русские буквы в комментариях CSS

Русские буквы в комментариях CSS

Заливаю лабу в gitlab, но там не отображаются комментарии русскими буквами в CSS файле, в html файле все нормальноКак сделать чтобы русские буквы...

347
Как обработать некоторые события, чтоб owl-carousel смотрелась корректно?

Как обработать некоторые события, чтоб owl-carousel смотрелась корректно?

Ситуация следующая, есть слайдер - каждый слайд в нём сдвинут влево (это нужно, чтоб кусочек следующего слайда был виден) и стоит бесконечная...

572