用c语言实现求一个字符串长度的函数

用c语言实现求一个字符串长度的函数:

分析:c语言中并没有限制字符串长度,程序必须扫描完整个字符串才能知道字符串的长度
根据题目要求写出函数声明: int My_Strlen(const char *ps);

int My_Strlen(const char *ps)//不用中间变量 用递归实现
{
    if((ps == NULL)||(*ps == '\0'))
    {
        return 0;  
    } 
    else
    {
        return 1+My_Strlen(++ps);
    }
}

int My_Strlen(const char *ps)//常规实现 声明一个整形变量
{

    int len = 0;
    if(ps == NULL)
    {
        return 0;
    } 
    for(;*ps++ != '\0';)
    {
        len++; 
    }
   
    return 0;
   
}

分析:

在字符串中通常可以利用最后一个结束符’\0’,但此处参数为const,只读,那么我们不能打他的主意。
函数运行过程中不占用内存基本不可能,除非都使用了寄存器。不使用中间变量只是说程序员不能显示的申请内存而已,即不能有局部变量或者动态内存申请。
如果函数自动申请栈内存或者使用寄存器存储变量,或者使用立即数寻址即常量,那么就相当于不使用中间变量
从函数原型看,返回值为int,那么在函数内部必定需要一个地方存储这个值,要么是常数要么是寄存器。
长度不为1时不能一次就求出来,说明必须有递归调用,这样递归时函数会自动申请栈内存,这样就相当于程序员不使用中间变量了。
中间返回的值通过寄存器自动保存,最后一次返回时拷贝到int中去。
C/C++中也有临时对象的概念,都是程序在运行过程中由编译器在栈中自动申请的对象,对程序员不可见,也相当于不使用中间变量

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值