定义strlen的函数说明
Explanation of the Function that Defines strlen
我正在学习 C++ 中的指针。
我研究了一下,发现手动定义strlen的函数是这样的。
int strlen(const char *a){
const char *b;
for (b=a;*b;++b);
return b-a;
}
谁能用简单的英语解释这段代码?特别是,为什么在for循环中将*b设置为终止条件?
这不是作业的答案。这只是我在研究时出现的一个问题。谢谢
在 C 和 C++ 中,字符串实际上被称为 null terminated byte strings。 null 终止符 等于零。在 C 和 C++ 中,零值等同于 false。
循环所做的是迭代直到"current character"(由b
指向)等于终止符。
这是一段特别简洁的 C 代码,有一个没有主体的 for
循环。
想法是将指针 b
设置到字符串 a
的开头,并继续前进直到遇到字符 '[=14=]'
,这表示字符串结束(即充当空终止符)。在那个循环中不需要做任何其他事情,因此它的主体是空的。
一旦循环结束,从b
中减去a
得到字符串的初始字符和它的空终止符之间的字符数,即字符串的长度。
下面是编写相同循环的更易读的方法:
for (b=a ; *b != '[=10=]' ; ++b) // Use explicit comparison to zero
; // Put semicolon on a separate line
当在需要逻辑表达式的语句中使用 C 表达式时,将应用与零的隐式比较。因此,*b != '[=17=]'
与 *b
相同。
我正在学习 C++ 中的指针。
我研究了一下,发现手动定义strlen的函数是这样的。
int strlen(const char *a){
const char *b;
for (b=a;*b;++b);
return b-a;
}
谁能用简单的英语解释这段代码?特别是,为什么在for循环中将*b设置为终止条件?
这不是作业的答案。这只是我在研究时出现的一个问题。谢谢
在 C 和 C++ 中,字符串实际上被称为 null terminated byte strings。 null 终止符 等于零。在 C 和 C++ 中,零值等同于 false。
循环所做的是迭代直到"current character"(由b
指向)等于终止符。
这是一段特别简洁的 C 代码,有一个没有主体的 for
循环。
想法是将指针 b
设置到字符串 a
的开头,并继续前进直到遇到字符 '[=14=]'
,这表示字符串结束(即充当空终止符)。在那个循环中不需要做任何其他事情,因此它的主体是空的。
一旦循环结束,从b
中减去a
得到字符串的初始字符和它的空终止符之间的字符数,即字符串的长度。
下面是编写相同循环的更易读的方法:
for (b=a ; *b != '[=10=]' ; ++b) // Use explicit comparison to zero
; // Put semicolon on a separate line
当在需要逻辑表达式的语句中使用 C 表达式时,将应用与零的隐式比较。因此,*b != '[=17=]'
与 *b
相同。