从定义double strtod ( const char * str, char ** endptr );
C参考站点提供了强大功能的示例:
char szOrbits[] = "365.24 29.53";
char * pEnd;
double d1, d2;
d1 = strtod (szOrbits,&pEnd);
d2 = strtod (pEnd,NULL);
如果endptr
的类型为char **
,为什么char *pEnd
在这里使用?而不是char **pEnd
?
答案 0 :(得分:6)
pEnd
的类型为char *
。 &pEnd
的类型为char **
。
C通过值将参数传递给函数,因此要修改指针,需要将指针传递给指针。
您可以直接定义char **
,但您需要将其初始化为char *
,因为strtod
正在修改char *
。
像:
char *q;
char **p = &q;
d1 = strtod (szOrbits, p);
显然,中间p
指针不是必需的,您可以直接使用&q
。
答案 1 :(得分:2)
pEnd
是char*
。对strtod()
的第一个示例调用将&pEnd
作为第二个参数传递。 &pEnd
是pEnd
的地址,因此类型为char**
。