Пойменована сукупність однотипних даних, звана масивом, широко використовується в різних мовах програмування. За допомогою масиву значно полегшується робота з даними, забезпечується структурованість програмного коду. Функції в мовами також мають величезне значення, дозволяючи виконувати вузькоспрямовану задачу в будь-якому місці коду, без її повторної реалізації. При цьому часто виникає необхідність використання даних одного масиву як у функції, так і в інших блоках коду. Повернення масиву з функції може бути реалізовано кількома способами.
Інструкція
В мові програмування С ++ безпосередній повернення масиву з функції непередбачений, дане завдання можна вирішити за допомогою передачі покажчика на масив даних. Для цього при оголошенні використовуваної функції пропишіть їй як значення, що повертається покажчик на тип даних, масив яких планується передавати.
Приклад коду програми на мові С ++, що реалізує повернення даних масиву за вказівником:
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-> 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-> returnArray () - // повернення масиву класу
}
Проте слід мати на увазі, що подібний повернення можливе лише в рамках одного класу. Якщо потрібно використовувати звичайну функцію в коді програми, аналогічна передача даних через покажчик буде некоректною і може виконуватися з помилкою. Це пов'язано з областю видимості змінних. При створенні масиву в самій функції він не буде видно за її межами.
У разі необхідності передачі масиву з локальної функції слід скористатися таким варіантом. Сформуйте масив в основному коді програми. Оголосіть функцію з параметрами, першим з яких буде константних покажчик на тип даних масиву, другий - звичайний покажчик того ж виду. При виконанні функції передайте в якості першого і другого параметра один і той же адресу створеного масиву. Роботу з даними в функції здійснюйте з першим отриманим покажчиком, а всі зміни записуйте за вказівником другого. Таким чином, по завершенні функції ви отримаєте результати його роботи в масиві по другому вказівником.
Приклад оголошення такої функції:
void my_funk_1 (const double * in, doble * out) -
Приклад оголошення такої функції:
void my_funk_1 (const double * in, doble * out) -
Використовуйте реалізований клас 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
У мові програмування 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
Скриптова мова 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