我是一名IT技术新手,目前正在通过跟随斯坦福大学的CS107视频学习(我不是那里的学生)。
如果有人感兴趣,下面是链接。
看到下面这个strtok
的实现,我不确定为什么第一个if语句要这样写:if (s == NULL && ((s = p) == NULL))
char *strtok(char *s, const char *sep)
{
static char *p = NULL;
if (s == NULL && ((s = p) == NULL))
return NULL;
s += strspn(s, sep);
if (!*s)
return p = NULL;
p = s + strcspn(s, sep);
if (*p)
*p++ = '\0';
else
p = NULL;
return s;
}
以下是我迄今为止发现的内容:
因此,如果第一个检查写成以下形式,它不会有任何区别:1)静态的
p
是一个局部静态变量,一旦找到一个令牌,它就会持续存在,并在找不到令牌时重置为NULL2)随后调用
strtoken
将s
作为NULL
传递
if (s == NULL && p == NULL)
或者说它以这种方式编写的原因是什么?
最后: return p = NULL
; 这只是以下简写吗:
p = NULL;
return p;
if
条件语句中编写代码。 - tadmanPython
经验,但在Python
中我并没有看到或使用过那个东西 - 这就是为什么当我第一次阅读这个实现时感到害怕的原因。 - Sam Hammamy