помогите исправить ошибку с выражением при вызове функции

"Выражение должно иметь тип указателя на объект" как исправить ошибку при вызове функции с циклом

#include<stdio.h>
#include<math.h>
#include<iostream>

int vvodmass(int a[], int  size)
{
    printf("ввод массива");
    int ch = 0;
    printf("ввод рандомности массива");
    scanf("%d", &ch);
    for (int i = 0; i <= size; i++) {
        a[i] = rand() % ch;
    }
    return 0;
}

int vyvodmass(int a[], int size) {
    printf("вывод массива");
    for (int i = 0; i <= size; i++) {
        printf("%i\n", a[i]);
    }
    return 0;
}

int main() {
    int x = 0;
    int y = 0;
    int vvodmass(x[]);
}

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

Автор решения: Супрематический Крестьянин

Во-первых, в функции main Вы должны объявить переменную, к примеру size, в которой должно храниться целочисленное значение, для дальнейшего объявления массива. Вместо int x = 0;, Вы должны написать int x[size];, где size количество элементов массива. Также Вы должны исправить вызов функции, вместо int vvodmass(x[]); напишите vvodmass(x, size);.

Примечания:
Следующее, что я заметил, это то, что в циклах for Вы пробегаетесь с int = 0 и до i <= size, то есть когда Вы заполняете массив, вместо size элементов, Вы заполняете size + 1 элементов(Не забывайте про int = 0!). В результате вы выходите за границы массива, что приведёт к UB(Undefined Behavior - Неопределённое Поведение).
Функции vvodmass и vyvodmass возвращают 0, хотя по сути, вы никуда это значение не присваиваете, поэтому целесообразно было бы использовать тип фунцкии void и убрать последние строки return 0;, хотя не принципиально.

→ Ссылка