не могу найти проблему в коде, выводится мусор (массивы и указатели С++)

        // 4. Написать функции:
    //4.1.Заповнення массива;
    //4.2.Вывод одномерного массива на экран (функция получает указатель на первый элемент массива)
    //4.3.Выводу элементов массива, которые стоят на четных местах, на экран (функция получает указатель на третий элемент массива)

    void FillArr(int arr, int size)
{
    for (int i = 0; i < size; i++)
    {
        arr = rand() % 10;
    }
}

void ShowArr(int arr, int size)
{
    for (int i = 0; i < size; i++)
    {
        cout << arr << " ";
    }
    cout << endl;
}

void ShowElement(int arr, int size)
{
    for (int i = 0; i < size; i += 2)
    {
        cout << arr << " ";
    }
    cout << endl;
}

int main()
{
    srand(time(0));
    const int size = 10;
    int arr[size];
    int* parr = &arr[0];

    FillArr(*arr, size);
    ShowArr(*arr, size);
    ShowElement(*arr, size);
}

Ответы (1 шт):

Автор решения: Harry

Ну давайте разберем ваш код.

void FillArr(int arr, int size)
{
    for (int i = 0; i < size; i++)
    {
        arr = rand() % 10;
    }
}

Аргументу (т.е. локальной переменнной) arr присваивается случайное значение size раз. Ни на что вне функции не влияет...

void ShowArr(int arr, int size)
{
    for (int i = 0; i < size; i++)
    {
        cout << arr << " ";
    }
    cout << endl;
}

size раз выводится переданное значение arr.

void ShowElement(int arr, int size)
{
    for (int i = 0; i < size; i += 2)
    {
        cout << arr << " ";
    }
    cout << endl;
}

То же самое, только вывод size/2 раз.

const int size = 10;
int arr[size];
int* parr = &arr[0];     // Неаонятно зачем

FillArr(*arr, size);     // Ничего не делает
ShowArr(*arr, size);     // 10 раз выводит значение `arr[0]`
ShowElement(*arr, size); // 5 раз выводит значение `arr[0]`

Ну, а поскольку массив не инициализирован - выводить может что угодно. Но одно и то же значение 10 и 5 раз!

→ Ссылка