用c语言实现求一个字符串长度的函数
2016-06-18 16:46
477 查看
分析:c语言中并没有限制字符串长度,程序必须扫描完整个字符串才能知道字符串的长度
根据题目要求写出函数声明: 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++中也有临时对象的概念,都是程序在运行过程中由编译器在栈中自动申请的对象,对程序员不可见,也相当于“不使用中间变量”
相关文章推荐
- C++14 make_index_sequence原理
- C++面向对象总结(二)--友元函数
- C++工厂模式详解——设计模式(2)
- C++11中的 "enable_if"小记
- c++中的const
- Problem G: C语言习题 n个数逆序
- 对于C++中traits的简单介绍
- Problem E: C语言习题 矩形法求定积分
- Problem D: C语言习题 矩阵元素变换
- Problem C: C语言习题 整数排序
- Java调用C++动态链接库dll,有详细过程。VS2015+Eclipse以及失败解决方案
- 双向循环链表-模板-自定义类型
- 遍历二叉树
- C语言的指针、链表的原理和各类操作
- 论飞机游戏在C语言程序的基本语句能完成功能的体会
- 飞机游戏在C语言程序的基本语句能完成功能的体会
- 飞机游戏在C语言程序的基本语句能完成功能的体会
- 飞机游戏在C语言程序的基本语句能完成功能的体会
- 飞机游戏在C语言程序的基本语句能完成功能的体会
- c++面向对象小结(一)--构造函数 析构函数