不使用变量,实现strlen函数
String 系列函数的实现是找工作时各大公司都爱考的题目,所以应该引起重视,“不使用中间变量”应该说是程序员不能显示的申请内存而已,即不能有局部变量或者动态内存申请。从函数原型看,返回值为size_t,那么在函数内部必定需要一个地方存储这个值,要么是常数要么是寄存器。长度不为1时不能一次就求出来,说明必须有递归调用,这样递归时函数会自动申请栈内存,这样就相当于程序员“不使用中间变量”了。中间返回的值通过寄存器自动保存,最后一次返回时拷贝到int中去。
size_t my_strlen(const char *str)
{
if (NULL == str)
{
return 0;
}
if (*str == '\0')
{
return 0;
}
else
{
return 1+ my_strlen(++str);
}
}