是什么初始化变量X为char **和初始化变量X为char *,然后使用&引用它区别?这个问题来自以下查询:指向指针的指针与C中指针的地址有什么区别?
我在看男人3 strtol函数。函数签名是:
long strtol(const char *restrict str, char **restrict endptr, int base);
因此,要通过endptr变量,我设置一个变量:
char **endptr;
,但是当我把它传递给它总是返回NULL的功能,即使在str传递给strtol的情况类似于abc。
即:
char ** endptr;
long exitval = strtol(args[1], endptr, 10); /* try to get the val */
if (endptr != NULL) { /* it wasn't a valid base-10 number */
然而,当我改变了我的初始化endptr到:
char *endptr;
,然后通过endptr为& endptr的功能,endptr设置正确。 IE:
char * endptr;
long exitval = strtol(args[1], &endptr, 10); /* try to get the val */
if (endptr != NULL) { /* it wasn't a valid base-10 number */
在两种情况下,我认为是我经过是的指针的指针在字符数组的第一个字符,但事实证明,一个方法工作,而另一个不表明我的理解不正确。
为什么一种方法有效,另一种不行?我误解了什么?
你是如何初始化'** endptr'的? – Ryan 2013-04-21 15:35:07
'strtol'的典型用法可能是'char * endptr = NULL; long l = strtol(buf,&endptr,10);'和Linux [strtol(3)](http://linux.die.net/man/3/strtol)手册页给出了一个完整的例子。 – 2013-04-21 15:37:08
@minitech,编辑Q以包含所用代码的两个版本。 – Nate 2013-04-21 15:39:19