gpt4 book ai didi

c++ - `(c = *str) != 0` 是什么意思?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:17:43 25 4
gpt4 key购买 nike

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”到底是什么意思?有人可以向我解释一下或帮助我提供正确的术语以自己搜索解释吗?

最佳答案

这个表达式有两部分:

  • c = *str - 这是通过取消引用指针对 c 的简单赋值,
  • val != 0 - 这是与零的比较。

这是可行的,因为赋值是一个表达式,即它有一个值。赋值的值与被赋值的值相同,在本例中,是指针指向的char。所以基本上,您有一个循环跟踪一个以 null 结尾的字符串到最后,同时将每个单独的 char 分配给 c

请注意 != 0 部分在 C 中是多余的,因为 while 循环的控制表达式隐式地与零进行比较:

while ((c = *str)) {
...
}

从语法的角度来看,第二对括号是可选的,但它保留在这样的赋值中,以表明赋值是有意的。换句话说,它告诉代码的读者你真正打算写一个赋值 c = *str,而不是一个比较 c == *str,这是更常见的内部循环控制 block 。第二对括号也抑制了编译器警告。

关于c++ - `(c = *str) != 0` 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43091251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com