Массивы имеют ни конструктор копирования и не копировать назначения оператор.
Вот некоторые подходы к задаче
Используя локальную ссылку на глобальный массив:
#include <iostream>
const size_t N = 10;
int global[N];
int (&functionReturnArray())[N]
{
for (size_t i = 0; i < N; i++)
{
global[i] = i;
}
return global;
}
int main()
{
int (&local)[N] = functionReturnArray();
for (int x : local) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
Выход является
0 1 2 3 4 5 6 7 8 9
Использование указателя на первый элемент из глобальный массив
#include <iostream>
const size_t N = 10;
int global[N];
int * functionReturnArray()
{
for (size_t i = 0; i < N; i++)
{
global[i] = i;
}
return global;
}
int main()
{
int *local = functionReturnArray();
for (size_t i = 0; i < N; i++) std::cout << local[i] << ' ';
std::cout << std::endl;
return 0;
}
Выход
0 1 2 3 4 5 6 7 8 9
Использование стандартного класса зЬй :: массив
#include <iostream>
#include <array>
#include <algorithm>
const size_t N = 10;
int global[N];
std::array<int, N> functionReturnArray()
{
for (size_t i = 0; i < N; i++)
{
global[i] = i;
}
std::array<int, N> a;
std::copy(global, global + N, a.begin());
return a;
}
int main()
{
std::array<int, N> local = functionReturnArray();
for (int x : local) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
Выход
0 1 2 3 4 5 6 7 8 9
Преимущество первого и третьего подходов является то, что локальные массивы (ссылка и объект типа std :: array) сохраняют информацию об их размерах.
В вашем примере вы должны просто изменить 'int local' на' int * local', но если он находится в том же файле, вам не нужно его возвращать. Вы можете просто ссылаться на него внутри любой из функций этого файла. –
Возможно, мне что-то не хватает, но ваш главный уже имеет доступ к глобальной ... Почему нужно возвращаться? Лучше всего переименовать int functionReturnArray() в void functionInitalizeArray() и забыть о возвращаемых значениях.Кроме того, ваш основной должен прочитать int main (int argc, const char * argv []) – Freddy
@Freddy, нет! 'int main()' отлично, я никогда не понимаю, почему люди настаивают на объявлении параметров 'main', которые они не используют. Фактически, две переносимые объявления для 'main' - это' int main() 'и' int main (int, char **) ', поэтому она определена реализацией независимо от того, является ли' const char * argv [] 'действительным! –