Ну, во-первых, ваша функция говорит, что она возвращает int, но вы хотите вернуть массив, так что это неправильно. Конечно, вы также не можете вернуть массив в C ...
Во-вторых, вам придется вернуть указатель. Вы не можете копировать массивы с помощью присваивания или назначать новое значение массиву в C, поэтому ваша функция не будет очень полезной. Либо верните int*
, либо примите int**
в качестве выходного аргумента и инициализируйте его в своей функции.
Кроме того, ваш массив размещен локально, поэтому, даже если компилятор не жаловался, вы бы вернули неверную память.
int makea (int size, int **out_array) {
int *temp, i;
if(!out_array)
return 0;
temp = malloc(sizeof(int) * size);
if(!temp)
return 0;
srand(time(0));
for (i = 0; i < size; ++i)
temp[i] = rand();
*out_array = temp;
return 1;
}
int main() {
int *arr;
if(!makea(10, &arr)) {
printf("Failed to allocate array");
return -1;
}
return 0
}
Другое примечание:
temp[i] = srand(time(0));
Это неправильно. srand
запускает генератор случайных чисел, но не возвращает случайное число. Вы набираете srand
для ввода начального числа, а затем набираете rand
, чтобы получить случайное число.