6

以下是strtol必须根据§ 7.22.1.4C11 (n1570) 声明的方式:

#include <stdlib.h>

long int strtol (const char *restrict nptr,
                 char **restrict endptr,
                 int base);

据我所知,restrict关键字意味着左值引用的对象*nptr只能用它或直接从它派生的值来访问。

然而,很多程序员,甚至是有经验的程序员,都是strtol这样使用的:

#include <stdlib.h>

strtol (p, &p, 10);

在这种情况下**endptr == **&p == *p == *nptr, 和行为未定义。这样对吗?

4

1 回答 1

8

不,没有任何东西可以通过**endptrin访问strtol。只有*endptr,一个完全独立的对象,被访问。

于 2013-02-14T16:47:37.880 回答