前言:我先想讲一个关于指针的问题,由于我一开始学习指针的时候很困惑,现在分享给大家。
假设我们定义一个指针p,我们首先要区分p、&p与*p的区别(对于初学者应该和我一开始一样迷茫)
p:p是一个指针变量的名字,表示此指针变量指向的内存地址,如果用%p输出的话它将是一个16进制位的数。
*p:*是解引用操作符,所以*p表示指针指向内存地址中所存放的内容,一般是和指针一样的变量或常量。
&p:&是取地址操作符,所以&p表示取指针p的地址
搞懂这些,我们开始用指针来求字符串个数:
#include<stdio.h>
int my_strlen(char* str)
{
char* start=str;
char* end=str;
while(*end!='\o')
{
end++;
}
return (end-start);//这一步用到了指针-指针(指针的运算)
}
int main()
{
char arr[]="abc";
int len=my_strlen(arr);//模拟一个strlen函数
printf("len=%d\n",len);
}
注:指针-指针的绝对值=两者之间的元素个数
第二种方法:函数递归
#include<stido.h>
int strlen(char* str)
{
if(*str!='\0')
{
return 1+strlen(str+1);
}
else
return 0;
}
int main()
{
char arr[]="abc";
int len=my_strlen(arr);//模拟一个strlen函数
printf("len=%d\n",len);
}
函数递归 把大事化小
my_strlen("abc");
1+my_strlen("ab");
1+1+my_strlen("c");
1+1+1+my_strlen("\0");
最后总结:任何题目,无论是编程还是其他,每道题的解答都不是唯一的,找到自己感兴趣并熟练掌握才是最重要的,同样,上边这道关于求解字符串长度的题的解答也不是唯一的,小伙伴们可以想一下其他方法并在评论区讨论。