Max*_*eld 4 c c++ syntax pointers
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);
}
Run Code Online (Sandbox Code Playgroud)
"(c =*str)!= 0"究竟是什么意思?有人可以向我解释或帮我给自己一个正确的条款来搜索解释吗?
这个表达式有两部分:
c = *str- 这是c取消引用指针的简单分配,val != 0 - 这是零比较.这是有效的,因为赋值是一个表达式,即它有一个值.赋值的值与赋值的值相同,在本例中char为指针指向的值.所以基本上,你有一个循环,跟踪一个空结尾的字符串到最后,分配每一个人char以c自有其道理.
请注意,该!= 0部分在C中是冗余的,因为while循环的控制表达式被隐式比较为零:
while ((c = *str)) {
...
}
Run Code Online (Sandbox Code Playgroud)
从语法角度看,第二对括号是可选的,但它保存在类似的赋值中,以指示赋值是有意的.换句话说,它告诉读者您的代码,您真正想要编写一个赋值c = *str,而不是比较c == *str,这是一个更常见的内部循环控制块.第二对括号也会抑制编译器警告.
| 归档时间: |
|
| 查看次数: |
1116 次 |
| 最近记录: |