Вы не можете вернуть n встроенный массив в C ++.
Если вы новичок в c ++ и запутались в указателях, вы действительно не хотите использовать массивы (по крайней мере, не встроенные массивы). Вместо этого используйте std::vector<int>
или, если у вас есть только определенное количество элементов, и вы хотите выразить это (и вам действительно нужна лучшая производительность), используйте boost::array<int, N>
. (Или даже std::array<int, N>
, если вы запрограммируйте в C++11
(если вы не знаете, программируете ли вы в C++11
, скорее всего, вы этого не сделаете).
Например:
std::vector<int> myfunction(const std::vector<int>& my_array) {
std::vector<int> f_array;
for(int i = 0; i < my_array.size(); ++i)
f_array.push_back(my_array[i]);
return f_array;
}
boost::array<int, 2> myfunction(const boost::array<int, 2>& my_array) {
boost::array<int, 2> f_array;
f_array[0] = my_array[0];
f_array[1] = my_array[1];
return f_array;
}
Затем вы можете сделать свой код копирования проще (посмотрите на конструкторы и функции-члены любого класса, который вы решите использовать, а также алгоритмы STL). Пример:
std::vector<int> myfunction(const std::vector<int>& my_array) {
std::vector<int> f_array(m_array);
...
return f_array;
}
В качестве еще одного пункта в вашем коде есть ошибка: вы определяете my_array
как int my_array[1]
, то есть массив с одним элементом, но вы получаете доступ к двум элементам (my_array[0]
и my_array[1]
), доступ к my_array[1]
выходит за пределы (int foo[N]
имеет место для N
элементов, начиная с индекса 0
и заканчивая индексом N-1
). Я полагаю, вы действительно имеете в виду int my_array[2]
.