从定义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?
发布于 2012-09-22 03:29:13
pEnd的类型为char *。&pEnd的类型为char **。
C通过值将参数传递给函数,因此要修改指针,您需要传递指向该指针的指针。
您可以直接定义char **,但需要将其初始化为char *,因为其想法是strtod正在修改char *。
像这样:
char *q;
char **p = &q;
d1 = strtod (szOrbits, p);显然,中间p指针不是必需的,您可以直接使用&q。
发布于 2012-09-22 03:28:56
正如您所观察到的,pEnd是一个char*。对strtod()的第一个示例调用将&pEnd作为第二个参数传递。&pEnd是pEnd的地址,因此属于char**类型。
https://stackoverflow.com/questions/12536967
复制相似问题