【发布时间】:2017-03-29 10:41:27
【问题描述】:
int equiv (char, char);
int nmatches(char *str, char comp) {
char c;
int n=0;
while ((c = *str) != 0) {
if (equiv(c,comp) != 0) n++;
str++;
}
return (n);
}
“(c = *str) != 0”实际上是什么意思? 有人可以向我解释一下或帮助我自己搜索解释的正确术语吗?
【问题讨论】:
-
这会取消引用指针
str并将其指向的值分配给c,然后将c与零进行比较。 -
*str取值来自str的地址;c = *str将此值分配给c;(c = *str) != 0检查此值是否不是NULL。NULL是 C/C++ 中字符串的结束标记,参见“空终止字符串”en.wikipedia.org/wiki/Null-terminated_string -
另外你可能不知道赋值是有价值的。例如,可以在 C/C++ 中编写 (a=(b=c)) == d。这里的每个赋值不仅仅是从右到左赋值,而是在括号外返回。
-
@Dims
NULL用于描述空指针,而不是空终止。混合这些会导致混乱。另外,请不要在 cmets 中回答。 -
@Dims 它是一个以空字符结尾的字符串,而不是一个以空字符结尾的字符串 - 该字符是 NUL 而不是 NULL。最近我自己也犯了这个错误:/