Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

loh lohovich Ученик (168), закрыт 1 год назад
Мне нужно передать из майна массив в функцию (с чем я справился), где он меняется, а потом передать его обратно в майн (по что и вопрос). Менять массив обязательно нужно в другой функции по заданию.
Лучший ответ
Папа Высший разум (152393) 2 года назад
В Си для массива всегда передаётся адрес его 0-го элемента. Так что все изменения массива, сделанные внутри функции, будут видны вызывающей функции.
Остальные ответы
Chromatic Scale Просветленный (28472) 2 года назад
Для передачи массива в функцию в языке 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 выводит новый массив и освобождает память, выделенную для него.
Сергей Гений (60360) 2 года назад
Ты же передаешь указатель на массив, и все изменения производятся непосредственно в самом массиве. А если имеется ввиду функция, которая подменивает массив своим - передавай указатель по указателю **, по ссылке *& или пусть возвращает указатель на другой массив.
Пример с изменением одномерного 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); //это си-стайл передавать указатель (даже на указатель)
}
...Гений (84997) 2 года назад
А new это C-стайл? ;)

Не то, что докапываюсь - немного подкалываю.
Сергей Гений (60360) ..., Ааа, точно. Весь пример в мусор. malloc рулит!
Похожие вопросы