将变量x初始化为 char ** 和将变量x初始化为 char * 然后使用&引用它有什么区别?这个问题来自以下调查:
我在看man 3 strtol函数。函数签名是:
long strtol(const char *restrict str, char **restrict endptr, int base);
因此,为了传递endptr变量,我设置了一个变量:
char **endptr;
但是当我将它传递给函数时,它总是返回 NULL,即使在传递给strtol的str类似于abc的情况下也是如此。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 的方式更改为:
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 */
在这两种情况下,我认为我传递的是指向 char array 中第一个 char 的指针的指针,但是一种方法有效而另一种方法无效的事实并不表明我的理解是不正确的。
为什么一种方法有效而另一种方法无效?我有什么误解?