我正在学习c ++中的指针。
我研究过并发现定义strlen的手动函数是这样的。
int strlen(const char *a){
const char *b;
for (b=a;*b;++b);
return b-a;
}
有人能用简单的英语解释这段代码吗?特别是,为什么* b被设置为for循环中的终止条件?
这不是家庭作业的答案。这只是我在研究期间出现的一个问题。感谢。
答案 0 :(得分:2)
在C和C ++中,字符串实际上称为 null终止 字节字符串。 null终止符等于零。在C和C ++中,零值等于false。
循环的作用是迭代直到“当前字符”(由b
指向)变得等于终结符。
答案 1 :(得分:2)
这是一段特别简洁的C代码,其中for
循环没有正文。
我们的想法是将指针b
设置为字符串a
的开头,并继续前进,直到您点击字符'\0'
,这表示搅拌结束(即服务作为null终止符)。在那个循环中没有其他任何东西需要做,因此它的身体是空的。
循环结束后,从a
减去b
会产生字符串的初始字符与其空终止符之间的字符数,即字符串的长度。
这是一种更易读的方法来编写相同的循环:
for (b=a ; *b != '\0' ; ++b) // Use explicit comparison to zero
; // Put semicolon on a separate line
当在需要逻辑表达式的语句中使用C表达式时,将应用隐式比较为零。因此,*b != '\0'
与*b
相同。