Як повернути масив з функції
Пойменована сукупність однотипних даних, звана масивом, широко використовується в різних мовах програмування. За допомогою масиву значно полегшується робота з даними, забезпечується структурованість програмного коду. Функції в мовах також мають величезне значення, дозволяючи виконувати вузькоспрямовану завдання в будь-якому місці коду, без її повторної реалізації. При цьому часто виникає необхідність використання даних одного масиву як у функції, так і в інших блоках коду. Повернення масиву з функції може бути реалізовано кількома способами.
1
У мові програмування С ++ безпосередній повернення масиву з функції непередбачений, це завдання можна вирішити за допомогою передачі покажчика на масив даних. Для цього при оголошенні використовуваної функції пропишіть їй в якості значення, що повертається покажчик на тип даних, масив яких планується передавати.
Приклад коду програми на мові С ++, що реалізує повернення даних масиву за вказівником:
class СHelp
{
private:
int m_data [4];
public:
fDebit ()
{
m_data [0] = 42;
m_data [1] = 56;
}
int * returnArray () // оголошення та опис функції
{
return m_data;
}
};
voidmain ()
{
int * m_dataA;
СHelp * ohelp = new СHelp ();
m_dataA = ohelp-gt; returnArray () - // повернення масиву класу
}
Однак слід мати на увазі, що подібний повернення можливе лише в рамках одного класу. Якщо потрібно використовувати звичайну функцію в коді програми, аналогічна передача даних через покажчик буде некоректною і може виконуватися з помилкою. Це пов`язано з областю видимості змінних. При створенні масиву в самій функції він не буде видно за її межами.
Приклад коду програми на мові С ++, що реалізує повернення даних масиву за вказівником:
class СHelp
{
private:
int m_data [4];
public:
fDebit ()
{
m_data [0] = 42;
m_data [1] = 56;
}
int * returnArray () // оголошення та опис функції
{
return m_data;
}
};
voidmain ()
{
int * m_dataA;
СHelp * ohelp = new СHelp ();
m_dataA = ohelp-gt; returnArray () - // повернення масиву класу
}
Однак слід мати на увазі, що подібний повернення можливе лише в рамках одного класу. Якщо потрібно використовувати звичайну функцію в коді програми, аналогічна передача даних через покажчик буде некоректною і може виконуватися з помилкою. Це пов`язано з областю видимості змінних. При створенні масиву в самій функції він не буде видно за її межами.
2
У разі необхідності передачі масиву з локальної функції слід скористатися таким варіантом. Сформуйте масив в основному коді програми. Оголосіть функцію з параметрами, першим з яких буде константний покажчик на тип даних масиву, другий - звичайний покажчик того ж виду. При виконанні функції передайте в якості першого і другого параметра один і той же адресу створеного масиву. Роботу з даними в функції здійснюйте з першим отриманим покажчиком, а всі зміни записуйте за вказівником другого. Таким чином, після закінчення функції ви отримаєте результати його роботи в масиві по другому покажчику.
Приклад оголошення такої функції:
void my_funk_1 (const double * in, doble * out) -
Приклад оголошення такої функції:
void my_funk_1 (const double * in, doble * out) -
3
Використовуйте реалізований клас std :: auto_ptr, що вирішує завдання передачі покажчика з функції без помилок з областю видимості змінних.
Приклад коду програми:
include
include
int [] Аrr_f2 (int count) // опис функції
{
return new int [count];
}
void main ()
{
std :: auto_ptr ptr (Аrr_f2 (20)) - // виклик функції і повернення нею масиву
cout
Приклад коду програми:
include
include
int [] Аrr_f2 (int count) // опис функції
{
return new int [count];
}
void main ()
{
std :: auto_ptr ptr (Аrr_f2 (20)) - // виклик функції і повернення нею масиву
cout
4
У мові програмування FoxPro повернення функції можна реалізувати схожим способом, звертаючись до раніше створеного масиву.
Приклад коду на мові FoxPro:
LOCAL mas (2)
= Func_2 (@ f3)
?mas (15)
?mas (20)
FUNCTION func_2 (mas)
EXTERNAL ARRAY mas
mas (1) = 1
mas (2) = 2
RETURN
ENDFUNC
Приклад коду на мові FoxPro:
LOCAL mas (2)
= Func_2 (@ f3)
?mas (15)
?mas (20)
FUNCTION func_2 (mas)
EXTERNAL ARRAY mas
mas (1) = 1
mas (2) = 2
RETURN
ENDFUNC
5
Скриптова мова AutoIt дозволяє повернути масив з функції, використовуючи стандартні конструкції і оператор Return.
Приклад коду на мові AutoIt:
#include
$ Rez = func_3 ()
$ ARezultat = StringSplit ($ Rez, `|`)
Func func_3 ()
$ ARet = 15 & `|` & 40
Return $ aRet // повернення масиву aRet з функції
EndFunc
Приклад коду на мові AutoIt:
#include
$ Rez = func_3 ()
$ ARezultat = StringSplit ($ Rez, `|`)
Func func_3 ()
$ ARet = 15 & `|` & 40
Return $ aRet // повернення масиву aRet з функції
EndFunc
Статті за темою "Як повернути масив з функції"
Оцініть, будь ласка статтю