不使用任何中间变量实现strlen()函数
更新日期:
文章目录
http://www.51testing.com/?uid-225738-action-viewspace-itemid-221151
《C语言实现strlen函数的几种方法》
http://blog.csdn.net/sailor_8318/article/details/3071048
递归的思想:
“不使用中间变量”只是说程序员不能显式的申请内存而已,即不能有局部变量或者动态内存申请。
如果函数自动申请栈内存或者使用寄存器存储变量,或者使用立即数寻址即常量,那么就相当于“不使用中间变量”。
从函数原型看,返回值为int,那么在函数内部必定需要一个地方存储这个值,要么是常数要么是寄存器。
长度不为1时不能一次就求出来,说明必须有递归调用,这样递归时函数会自动申请栈内存,这样就相当于程序员“不使用中间变量”了。
中间返回的值通过寄存器自动保存,最后一次返回时拷贝到int中去。
这种问题都是利用常量,或者将变量的申请交给编译器在递归过程中自动在栈中申请。
1 | int NoMallocStrlen(const char *str) { if (str==NULL) { return 0; } if (*str != '/0') { return 1+NoMallocStrlen(++str); } else return 0; } int main() { const char *p = "hello!"; int a = NoMallocStrlen(p); if(a == strlen(p)) { printf("NoMallocStrlen is well done!/n"); } else { printf("Error!/n"); } } |