Инструкция
1
В языке программирования С++ непосредственный возврат массива из функции непредусмотрен, данную задачу можно решить с помощью передачи указателя на массив данных. Для этого при объявлении используемой функции пропишите ей в качестве возвращаемого значения указатель на тип данных, массив которых планируется передавать.
Пример кода программы на языке С++, реализующий возврат данных массива по указателю:
class СHelp
{
private:
int m_data[4];
public:
fDebit()
{
m_data[0]=42;
m_data[1]=56;
}
int *returnArray() // объявление и описание функции
{
return m_data;
}
};
void main()
{
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;
}
};
void main()
{
int *m_dataA;
СHelp *ohelp=new СHelp();
m_dataA=ohelp->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