В данном случае в вашей программе нет необходимости использовать массив, лучше завести 3 переменные в структуре ivector3d
struct ivector3d {
int x = 0;
int y = 0;
int z = 0;
};
Затем обращаться к ним из функции scale.
Если вас интересует возвращение массива из функции, то вам нужно вернуть указатель на первый элемент массива
int* get() {
return array;
}
Но это плохой способ, т.к. при таком подходе теряется информация о размере массива. Эту проблему можно решить возвращая размер массива в параметрах функции.
int* get(int& size) {
size = 3;
return array;
}
Но, согласитесь, это не очень удобно. В таком случае предлагается изменить код на использование контейнера std::array.
struct ivector3d {
std::array<int, 3> array;
std::array<int, 3> get() {
return array;
}
};
По итогу, программа будет выглядеть следующим образом
#include <iostream>
#include <array>
using namespace std;
struct ivector3d {
std::array<int, 3> array;
std::array<int, 3> get() {
return array;
}
};
void scale(ivector3d* v, int k) {
for (int i = 0; i != 3; ++i)
v->array[i] *= k;
}
int main() {
ivector3d iv3d = {1,1,1};
scale(&iv3d, 2);
auto b = iv3d.get();
for(auto i : b)
{
cout << i << " ";
}
}