前言:我先想讲一个关于指针的问题,由于我一开始学习指针的时候很困惑,现在分享给大家。

假设我们定义一个指针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);
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

注:指针-指针的绝对值=两者之间的元素个数

第二种方法:函数递归

#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);
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

函数递归 把大事化小

my_strlen("abc");

1+my_strlen("ab");

1+1+my_strlen("c");

1+1+1+my_strlen("\0");

最后总结:任何题目,无论是编程还是其他,每道题的解答都不是唯一的,找到自己感兴趣并熟练掌握才是最重要的,同样,上边这道关于求解字符串长度的题的解答也不是唯一的,小伙伴们可以想一下其他方法并在评论区讨论。