不使用變量,實現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);
}
}