Как уже отмечали другие, вы передаете свой массив (int *) по значению, поэтому, когда вы говорите arr=...
, вы на самом деле не изменяете массив, который передали.
You 'Вы также получили утечку памяти, как вы ее написали.Это не имеет большого значения, когда вы вызываете doArray
только один раз в теле вашей программы, но если он вызывается повторно и массив никогда не будет free
d (или delete
d, если вы сделали это с помощью new
) тогда это может вызвать проблемы.Как правило, лучший способ справиться с этим - использовать STL .Затем вы написали бы
#include <vector>
#include <iostream>
int doArray(std::vector<int> &arr) {
int sz = 10;
arr.resize(sz);
for (int i=0; i<sz; i++) {
arr[i] = i * 5;
}
return sz;
}
int main(int argc, char *argv[]) {
std::vector<int> arr;
int size = doArray(arr);
for (int i=0; i<size; i++) {
std::cout << arr[i] << std::endl;
}
return 0;
}
Однако, с STL есть более идиоматические способы, чем возвращение размера, так как вы можете просто запросить arr.size()
, и, если вам действительно интересно, можете использовать такие функции, какfor_each
или ostream_iterator
для печати всех ваших элементов.