In C++, we don't tend to use C style arrays, it is more common and easier to use standard classes that can hold arrays. In this case, you can use either std::vector or, if you have a reasonably recent compiler, std::array, as so:
#include <iostream>
#include <array>
using namespace std;
array<double,2> grav_force (double m1, double m2, const array<double,2>& r1, const array<double,2>& r2){
// Calculate distance between bodies:
double r12; // scalar distance
array<double,2> r_12; // distance vector
for (int i=0; i<2 ; i++){
r12 += (r2[i] - r1[i])*(r2[i] - r1[i]);
r_12[i] = r2[i] - r1[i];
}
r12 = sqrt(r12);
// Gravitational factor:
double G = m1*m2/(r12*r12*r12); // Grav.const. = 1
return array<double,2>{ G*r_12[0], G*r_12[1] };
}
int main(int argc, char* argv[])
{
array<double,2> r1 = {1.0, 2.0};
array<double,2> r2 = {2.0, 4.0};
double m1 = 1.0;
double m2 = 1.0;
array<double,2> asd = grav_force(m1, m2, r1, r2);
cout << "asd: " << asd[0] << ", " << asd[1] << endl;
return 0;
}
Or, better yet, you can use std::valarray which has most vector operations you would like:
#include <iostream>
#include <valarray>
using namespace std;
valarray<double> grav_force (double m1, double m2, const valarray<double>& r1, const valarray<double>& r2){
// Calculate distance between bodies:
valarray<double> r_12 = r2 - r1; // distance vector
double r12 = sqrt((r_12 * r_12).sum()); // scalar distance
// Gravitational factor:
double G = m1*m2/(r12*r12*r12); // Grav.const. = 1
return G * r_12;
}
int main(int argc, char* argv[])
{
valarray<double> r1(2); r1[0] = 1.0; r1[1] = 2.0;
valarray<double> r2(2); r2[0] = 2.0; r2[1] = 4.0;
double m1 = 1.0;
double m2 = 1.0;
valarray<double> asd = grav_force(m1, m2, r1, r2);
cout << "asd: " << asd[0] << ", " << asd[1] << endl;
return 0;
}