2012-09-21 48 views
0

自定義double strtod (const char * str, char ** endptr);strtod轉換定義,並通過指針的類型

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

在C中查找通過引用。這就是它的作用。 – chris

+0

'endptr'的類型爲'char **',所以函數可以修改它指向的'char *'。 –

回答

6

pEnd的類型是char *&pEnd的類型是char **

C通過值傳遞參數給函數,所以要修改一個指針需要傳遞一個指針到指針。

你可以直接定義char **但你需要把它初始化爲char *的想法是,strtod被修改char *

像:

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

d1 = strtod (szOrbits, p); 

顯然,中間p指針是沒有必要的,您可以直接使用&q

+0

+1經典的指針誤解+ –

2

pEndchar*。第一個示例調用strtod()通過&pEnd作爲第二個參數。 &pEndpEnd的地址,因此是char**類型。