【问题标题】:strtod definition and type of passed pointerstrtod 定义和传递指针的类型
【发布时间】:2012-09-14 06:09:00
【问题描述】:

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

【问题讨论】:

  • 在 C 中查找 pass-by-reference。这就是它的作用。
  • endptrchar** 类型,因此函数可以修改它指向的char*

标签: c strtod


【解决方案1】:

pEnd 的类型是char *&pEnd 的类型是char **

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

您可以直接定义char **,但您需要将其初始化为char *,因为strtod 正在修改char *

喜欢:

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

d1 = strtod (szOrbits, p);

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

【讨论】:

  • +1 对指针的经典误解的很好解释/
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    相关资源
    最近更新 更多