I'm sorry, but I am not clear about the parameter... can u explain more...?
When you call a function you can include a list of values (parameters) that the function can use. Such as
int anInt = 123;
Serial.println(anInt);
Sometimes you want the function to manipulate the values sent and maybe send back the result as in
int startNumber = 123;
int theSquare = squareInt(startInt);
//other code here
int squareInt(int aNumber) //function to return the square of a number
{
return aNumber * aNumber; //return the answer to the calling program
}
Note that the value of startInt is passed to the function and the function does not change its value and that only one value can be returned. This is known as passing by value.
But suppose you want to get more than one value from a function. You can do something like this
gps.f_get_position(&flat, &flon);
Note that the function is not called in the same way. At first glance it would appear that nothing is returned by the function but the variables that it has been called with have a & in front of their name. This is known as calling by reference and in English it means "here is a reference to a variable and you (the function) have permission to make changes to the value of the variable". This is known as passing by reference
So
gps.f_get_position(&flat, &flon);
means "execute the function and put the results in the 2 variables for use later by the main program"
Now look at your working and non working programs and spot the difference between
gps.f_get_position(&flat, &flon);
and
float flon = gps.TinyGPS::f_get_position(flon);