Як передати масив у функцію і повернути його stack overflow російською

Справа в тому що в C ++ в функцію можна передати тільки покажчик (або посилання) на масив, відповідно ви завжди будете працювати з вихідним масивом, а не з його копією (і повернете також покажчик на вихідний масив):

Так само цей код не враховує розмір масиву (цикл проходить строго три рази), що може привести до наступного:

  • якщо довжина вхідного масиву більше 3: оброблені будуть тільки перші три елементи масиву;
  • якщо довжина вхідного масиву менше 3: програма впаде з гуркотом і помилкою доступу до пам'яті.

Проблему з розміром можна вирішити двома шляхами: передавати в функцію додатково розмір масиву або передавати масив за посиланням (якщо передавати масив за посиланням, помилки з тим, що ви передали або повернули масив неправильного розміру будуть виявлені на стадії компіляції):

Щоб повернути новий масив, доведеться просто всередині функції виділити пам'ять під новий масив і повернути покажчик на неї (головне потім не забути очистити пам'ять):

Але у нас же C ++, чорт візьми, так що варто замість стандартних сішних масивів скористатися тими контейнерами, які надає Батьківщина STL:

  • std :: vector такий "масив" із змінним розміром;
  • std :: array масив фіксованого розміру.

Тепер ми можемо використовувати ітератори, Range-based for loop (починаючи з C ++ 11) та інші принади:

Чи не знавець в C ++ але можу сказати, що ви не передаєте масив, а передаєте функии покажчик на його перший елемент. В такому випадку ви працюєте ні з локальною копією масиву, а з його покажчиком.

Якщо завдання функції int Func (int Array []) полягає в тому щоб модифікувати "переданий масив" вам зовсім не обов'язково возващать його, а якщо вам дуже вже хочеться щось повернути в місце виклику (що в даному випадку немає сенсу) - то потрібно змінити сіганатуру функції:

Зауважте, що повертається тип int * це покажчик на int.

Передається покажчик на масив і робота ведеться безпосередньо з ним, отже, зовсім необов'язково робити повернення, наприклад: