long Convert_Geodetic_To_UTM (double Latitude,
double Longitude,
long *Zone,
char *Hemisphere,
double *Easting,
double *Northing);
我很困惑,因为带指针的变量是输出
Convert_Geodetic_To_UTM
。当我创建函数时,我总是创建具有返回值的函数。我找不到合适的表达式语法。我的意思是我应该插入函数的输出槽?为了不复制,我确实检查了十几个问题,但我能找到的只是“函数指针”,这与我想的不一样。
这只是整个.c
文件中的一个函数。要查看完整代码,请参阅this github link.
long Convert_Geodetic_To_UTM (double Latitude,
double Longitude,
long *Zone,
char *Hemisphere,
double *Easting,
double *Northing)
{
/*
* The function Convert_Geodetic_To_UTM converts geodetic (latitude and
* longitude) coordinates to UTM projection (zone, hemisphere, easting and
* northing) coordinates according to the current ellipsoid and UTM zone
* override parameters. If any errors occur, the error code(s) are returned
* by the function, otherwise UTM_NO_ERROR is returned.
*
* Latitude : Latitude in radians (input)
* Longitude : Longitude in radians (input)
* Zone : UTM zone (output)
* Hemisphere : North or South hemisphere (output)
* Easting : Easting (X) in meters (output)
* Northing : Northing (Y) in meters (output)
*/
long Lat_Degrees;
long Long_Degrees;
long temp_zone;
long Error_Code = UTM_NO_ERROR;
double Origin_Latitude = 0;
double Central_Meridian = 0;
double False_Easting = 500000;
double False_Northing = 0;
double Scale = 0.9996;
if ((Latitude < MIN_LAT) || (Latitude > MAX_LAT))
{ /* Latitude out of range */
Error_Code |= UTM_LAT_ERROR;
}
if ((Longitude < -PI) || (Longitude > (2*PI)))
{ /* Longitude out of range */
Error_Code |= UTM_LON_ERROR;
}
if (!Error_Code)
{ /* no errors */
if((Latitude > -1.0e-9) && (Latitude < 0))
Latitude = 0.0;
if (Longitude < 0)
Longitude += (2*PI) + 1.0e-10;
Lat_Degrees = (long)(Latitude * 180.0 / PI);
Long_Degrees = (long)(Longitude * 180.0 / PI);
if (Longitude < PI)
temp_zone = (long)(31 + ((Longitude * 180.0 / PI) / 6.0));
else
temp_zone = (long)(((Longitude * 180.0 / PI) / 6.0) - 29);
if (temp_zone > 60)
temp_zone = 1;
/* UTM special cases */
if ((Lat_Degrees > 55) && (Lat_Degrees < 64) && (Long_Degrees > -1)
&& (Long_Degrees < 3))
temp_zone = 31;
if ((Lat_Degrees > 55) && (Lat_Degrees < 64) && (Long_Degrees > 2)
&& (Long_Degrees < 12))
temp_zone = 32;
if ((Lat_Degrees > 71) && (Long_Degrees > -1) && (Long_Degrees < 9))
temp_zone = 31;
if ((Lat_Degrees > 71) && (Long_Degrees > 8) && (Long_Degrees < 21))
temp_zone = 33;
if ((Lat_Degrees > 71) && (Long_Degrees > 20) && (Long_Degrees < 33))
temp_zone = 35;
if ((Lat_Degrees > 71) && (Long_Degrees > 32) && (Long_Degrees < 42))
temp_zone = 37;
if (UTM_Override)
{
if ((temp_zone == 1) && (UTM_Override == 60))
temp_zone = UTM_Override;
else if ((temp_zone == 60) && (UTM_Override == 1))
temp_zone = UTM_Override;
else if ((Lat_Degrees > 71) && (Long_Degrees > -1) && (Long_Degrees < 42))
{
if (((temp_zone-2) <= UTM_Override) && (UTM_Override <= (temp_zone+2)))
temp_zone = UTM_Override;
else
Error_Code = UTM_ZONE_OVERRIDE_ERROR;
}
else if (((temp_zone-1) <= UTM_Override) && (UTM_Override <= (temp_zone+1)))
temp_zone = UTM_Override;
else
Error_Code = UTM_ZONE_OVERRIDE_ERROR;
}
if (!Error_Code)
{
if (temp_zone >= 31)
Central_Meridian = (6 * temp_zone - 183) * PI / 180.0;
else
Central_Meridian = (6 * temp_zone + 177) * PI / 180.0;
*Zone = temp_zone;
if (Latitude < 0)
{
False_Northing = 10000000;
*Hemisphere = 'S';
}
else
*Hemisphere = 'N';
Set_Transverse_Mercator_Parameters(UTM_a, UTM_f, Origin_Latitude,
Central_Meridian, False_Easting, False_Northing, Scale);
Convert_Geodetic_To_Transverse_Mercator(Latitude, Longitude, Easting,
Northing);
if ((*Easting < MIN_EASTING) || (*Easting > MAX_EASTING))
Error_Code = UTM_EASTING_ERROR;
if ((*Northing < MIN_NORTHING) || (*Northing > MAX_NORTHING))
Error_Code |= UTM_NORTHING_ERROR;
}
} /* END OF if (!Error_Code) */
return (Error_Code);
} /* END OF Convert_Geodetic_To_UTM */
答案 0 :(得分:5)
首先声明变量并将其地址传递给函数。在函数调用结束时,它们将被填充。
long zone;
char hem;
double easting;
double northing;
Convert_Geodetic_To_UTM(35.123,-70.321, &zone, &hem, &easting, &northing);
答案 1 :(得分:1)
在C中有两种主要的返回方式或者&#34;输出&#34;一些价值观。您最习惯使用return
关键字返回的内容如下:
int func() {
return 0; // Like this
}
你可以这样称呼它:ret = func()
。但是,有时当函数必须返回多个值时,通常在C中它们通过引用返回参数:
void func2(int* a, bool* b) {
*a = 1;
*b = 2;
}
您可以通过声明变量然后使用&
运算符来获取变量的地址来调用此函数。然后,当调用该函数时,这些值将填充到声明的变量中。
int a;
bool b;
func2(&a, &b);
这通常在您还必须返回其他错误代码时完成(无论函数是否成功,或者是否因特定错误号而失败)。在这种情况下,将使用return
返回错误代码,其他返回值或输出值将通过引用传递。