一.通过数组下标计算
#include <stdio.h>
int my_strlen(char* s)
{
int i = 0;
int count = 0;
while (s[i] != '\0')
{
i++;
count++;
}
return count;
}
int main()
{
char arr[] = "abcdef";
int ret = my_strlen(arr);
printf("%d", ret);
return 0;
}
利用字符串的特性:字符串默认最后有\0 来作为循环进入条件的判断。
因为要循环多次,所以使用while循环
二.通过指针访问
#include <stdio.h>
int my_strlen(char* s)
{
int count = 0;
while (*s != '\0')
{
s++;
count++;
}
return count;
}
int main()
{
char arr[] = "abcdef";
int ret = my_strlen(arr);
printf("%d", ret);
return 0;
}
在原理上,大致和用下标访问数组上的元素是一样的。只是当用指针访问数组元素时,要用到解引用操作符*
*s 表示指针变量s指向的数
s++指针右移
三.指针-指针
#include <stdio.h>
int my_strlen(char* s)
{
char* p = s; //把数组首元素地址放进指针
while (*s != '\0')
{
s++;
}
return s-p ;
}
int main()
{
char arr[] = "abcdef";
int ret = my_strlen(arr);
printf("%d", ret);
return 0;
}
指针 - 指针 得到的数值的绝对值 是指针和指针之间的元素个数
运算前提条件是 指针和 指针 指向 同一块空间
这样的原理是 用字符串指向\0的指针 减去 原来首元素地址的指针
得到的就是\0之前的元素个数
举个指针相减的例子