0

从定义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

4

2 回答 2

6

的类型pEndchar *。的类型&pEndchar **

C 通过值将参数传递给函数,因此要修改指针,您需要将指针传递给指针。

您可以直接定义 achar **但您需要将其初始化为 achar *因为想法是strtod修改 a char *

像:

char *q;
char **p = &q;

d1 = strtod (szOrbits, p);

显然中间p指针不是必须的,可以&q直接使用。

于 2012-09-21T19:29:12.813 回答
2

pEnd是 a char*,正如您所观察到的。第一个示例调用作为第二个参数strtod()传递。是 的地址,因此属于 类型。&pEnd&pEndpEndchar**

于 2012-09-21T19:28:55.767 回答