Печатный массив, полученный как возвращаемое значение C ++ [duplicate]

for num in range(1,101):
    prime = True
    for i in range(2,num/2):
        if (num%i==0):
            prime = False
    if prime:
       print num
0
задан Bugs Happen 28 December 2012 в 16:13
поделиться

3 ответа

theArray является локальным массивом в функции add5ToEveryElement(), которую вы возвращаете в main (). Это неопределенное поведение.

Минимально вы можете изменить эту строку:

int theArray[5];

to:

int *theArray = new int[5];

Все будет работать нормально. Не забудьте delete это позже в main (). SInce вы измените исходный указатель, сохраните его:

int *arr = add5ToEveryElement(noArr, size);
int *org = arr;
// Rest of the code

//Finally

 delete[] org;
2
ответ дан P.P. 1 September 2018 в 00:54
поделиться

это идеальный код

# include <conio.h>
# include <iostream>
using namespace std;

int * add5ToEveryElement(int arr[], int size)
{
    int *theArray = new int[5];
    for(int i=0; i<size; i++)
    {
        theArray[i] = arr[i] + 5;
        cout<<theArray[i]<<endl;
    }
    return theArray;
}

void main()
{
    const int size = 5;
    int noArr[size];
    for(int i=0; i<size; i++)
    {
        noArr[i] = i;
    }
    int *arr = add5ToEveryElement(noArr, size);
    int *p = arr;
    cout<<endl;cout<<endl;
    for(int i=0; i<size; i++)
    {
        cout<<arr[i]<<endl;
    }
    cout<<endl;cout<<endl;cout<<endl;cout<<endl;
    for(int i=0; i<size; i++)
    {
        cout<<*arr<<endl;
        *arr++;
    }
    getch();
    delete[] p;
}
0
ответ дан Bugs Happen 1 September 2018 в 00:54
поделиться

Возврат массива из функции обычно считается плохим.

Если вы НЕ ДОЛЖНЫ иметь «новый» массив, я бы предположил, что типичный случай в C и C ++ должен изменить входной массив. Если функция CALLING хочет иметь два отдельных массива, тогда она может сделать это, создав собственную копию. В качестве альтернативы вы можете написать свой код, чтобы в вашу функцию были переданы два массива, например.

void add5ToEveryElement(int arr[], int arr2[], int size)
{
    for(int i=0; i<size; i++)
    {
        arr2[i] = arr[i] + 5;
        cout<<theArray[i]<<endl;
    }
}

, тогда ваш главный вызовет два аргумента массива, и если вы хотите использовать то же самое, что и вход и выход, он тоже это сделает.

Конечно, это не совсем ответ на ваш вопрос, но он дает «лучшее» решение вашей проблемы.

Мне вообще не нравится распределение в функциях - особенно «скрытое» распределение (эта функция говорит, что добавляет 5 к каждому элементу, а не «выделяет массив с добавлением 5 к каждому элементу»). Код никогда не должен удивлять, и выделение памяти - это немного неожиданность, если вы только попросили добавить 5 к каждому элементу)

0
ответ дан Mats Petersson 1 September 2018 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: