I think I get the functionality -- passing a reference into a function passes the address, so modifications to a_val and b_val in get_point below change the values of variables in calling_func.
What I don't understand is how this is actually achieved -- are the values moved to heap space and their addresses passed into get_point? Or can addresses from the calling_func stack frame be passed into get_point and modified there?
void calling_func() {
float a, b;
get_point(a,b);
}
void get_point(float& a_val, float& b_val) {
a_val = 5.5;
b_val = 6.6;
}