Возврат из функции и её вызов в С++

182
12 июня 2018, 08:50

Имею 2 функции (различий меж ними нет, практически) Правильно ли я выполняю из них возврат? И как правильно их нужно вызывать в main (между массивами, возвращаемых обеими функциями, нужно будет провести математические операции)?

int summa(int x[], int y[], int nRow)
{
        int *sum = new int[nRow];
        for (int i=0; i<nRow; i++)
                sum[i]=x[i]+y[i];
        for (int i=0; i<nRow; i++)
                return sum[i];
}
int dobutok(int x[], int y[], int nRow)
{
        int *dob = new int[nRow];
        for (int i=0; i<nRow; i++)
                dob[i]=x[i]*y[i];
        for (int i=0; i<nRow; i++)
                return dob[i];
}   
Answer 1

Если вы хотите вернуть в первом случае sum[0], а во втором - dob[0], то правильно.

После выполнения return функция прекращает работу - так что из всего цикла return будет выполнено только на первой итерации.

Но если вы хотите вернуть выделенную для нового массива память - то объявляйте функцию как возвращающую int*, и просто возвращайте return sum.

Потом не забудьте освободить выделенную память.

int * summa(int x[], int y[], int nRow)
{
        int *sum = new int[nRow];
        for (int i=0; i<nRow; i++)
                sum[i]=x[i]+y[i];
        return sum;
}

int main()
{
    int x[] = { 1, 2, 3};
    int y[] = { 4, 5, 6};
    int * s = summa(x,y,3);
    for(int i = 0; i < 3; ++i) cout << s[i] << endl;
    delete[] s;
}

Примерно так.

Но куда лучше использовать, например, vector - слишком велика вероятность ошибиться и забыть удалить возвращаемый массив или перепутать, какой у него размер...

Answer 2

Так как вам уже ответили, я лишь добавлю, что проще и лучше работать в таких случаях с std::valarray. Он позволит обойтись без функции и лишных забот.

int x[] = { 1, 2, 3};
int y[] = { 4, 5, 6};
std::valarray<int> vx(x, 3), vy(y, 3), result = vx + vy;
for (int i : result)
    cout << i << endl;
READ ALSO
Ассемблер. Ассемблерные вставки. Строки

Ассемблер. Ассемблерные вставки. Строки

Как копировать одну строку в другуюНапример, строка text1[6]="fsdfaf" копируется в text2[6]={0}

188
Как сделать отображение чата на Qt

Как сделать отображение чата на Qt

Есть база данных в которой хранятся все сообщения, сервер их подгружает, но возникла проблема в визуализации этих же сообщенийТо есть нужен...

166
Как прочитать 64 битное значение?

Как прочитать 64 битное значение?

Мне надо поместить информацию об ELF в структуру заголовка, при этом поля труктуры являются 64 битными значениямиКогда я пробую их прочитать...

224
как сделать эффект grayscale

как сделать эффект grayscale

Можно ли как-то сделать эффект такой же как на этом видео https://wwwyoutube

213