C/C++

Как массив передать в функцию и обратно? (Язык C)

Мне нужно передать из майна массив в функцию (с чем я справился), где он меняется, а потом передать его обратно в майн (по что и вопрос). Менять массив обязательно нужно в другой функции по заданию.
В Си для массива всегда передаётся адрес его 0-го элемента. Так что все изменения массива, сделанные внутри функции, будут видны вызывающей функции.
ВЗ
Владимир Звездин
87 571
Лучший ответ
Ты же передаешь указатель на массив, и все изменения производятся непосредственно в самом массиве. А если имеется ввиду функция, которая подменивает массив своим - передавай указатель по указателю **, по ссылке *& или пусть возвращает указатель на другой массив.
Пример с изменением одномерного int массива:
void change(int**a, int size) //наша функция
{
int* new_a = new int[size];
...делаем шо нужно с этим новым массивом...
delete[] *a; //удаляем переданный массив
*a = new_a; //подменяем своим.
}
а в мейне в функцию передается адрес указателя на массив:
int main() //наш майн
{
int* arr;
...тырыпыры... //где тырыпыры - код программы который не интересен
change(&arr, size); //это си-стайл передавать указатель (даже на указатель)
}
Абдурашид Козиев А new это C-стайл? ;)

Не то, что докапываюсь - немного подкалываю.
Для передачи массива в функцию в языке C вы можете передать его по указателю. Это позволяет функции изменять элементы массива в месте, где он был создан.

Вот пример кода, который передает массив в функцию, где он изменяется, и затем возвращает его в main:
 #include  

// функция, которая изменяет элементы массива
void changeArray(int *arr, int size) {
for (int i = 0; i < size; i++) {
arr[i] *= 2;
}
}

int main() {
int arr[5] = {1, 2, 3, 4, 5};

// вызываем функцию, которая изменяет массив
changeArray(arr, 5);

// выводим измененный массив
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}

return 0;
}
В этом примере функция changeArray принимает указатель на начало массива и его размер. Она изменяет каждый элемент массива, умножая его на 2. Затем main выводит измененный массив.

Если вам нужно вернуть массив из функции, то вы также можете использовать указатели. Вы можете выделить память для нового массива в функции, заполнить его и вернуть указатель на начало массива.

Вот пример кода, который выделяет память для нового массива, заполняет его случайными числами и возвращает указатель на начало массива:
 #include  
#include
#include

// функция, которая возвращает новый массив
int* createArray(int size) {
// выделяем память для нового массива
int *arr = malloc(size * sizeof(int));

// заполняем массив случайными числами
srand(time(NULL));
for (int i = 0; i < size; i++) {
arr[i] = rand() % 100;
}

// возвращаем указатель на начало массива
return arr;
}

int main() {
int *arr;

// вызываем функцию, которая создает новый массив
arr = createArray(5);

// выводим новый массив
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}

// освобождаем память, выделенную для массива
free(arr);

return 0;
}
В этом примере функция createArray выделяет память для нового массива, заполняет его случайными числами и возвращает указатель на начало массива. Затем main выводит новый массив и освобождает память, выделенную для него.