直接上代码:
#include<stdio.h>
//用函数和指针实现strlen函数——Strlen
int Strlen(const char *p)
{
//用上const的原因:这个函数只会读取‘char’数组的内容来计算长度,而不会修改数组的任何内容
//保证了传入的字符串在函数执行后不会发生改变
int length = 0;//初始化长度的值
while(*p != '\0')
{
p++; //移动到字符串的下一个字符
length++; //计数器递增
}
return length; //返回计算出的长度
}
int main()
{
char arr[80] = {"hello world!"};
char* p = &arr;
printf("长度是%d\n", Strlen(p));
return 0;
}
下面是运行结果:
思路:
遍历传入的字符串,计数直到遇到终止字符 '\0'
(字符串的结束标记)为止。
其实代码里已经详细进行了详细的注释,这里仍然简单的说明一下:
在函数里先创建了一个 length
变量来跟踪字符串的长度。它遍历字符串,每次循环将指针 p
向前移动一个字符,并增加 length
的值。当指针指向的字符是 '\0'
时,循环结束,此时 length
就是字符串的长度。最后,函数返回 length
的值。
注:
如果你对 p++可以移动到字符串的下一个字符 有疑问,那么下面的文字可能会帮到你。
字符串在C语言中通常以字符数组的形式表示,以空字符 '\0'
作为结束标志。当你有一个指向字符数组(字符串)的指针时,这个指针实际上存储的是数组第一个元素(第一个字符)的内存地址。
指针的递增操作 p++
会使得指针 p
增加一个单位。对于字符指针来说,一个单位等于一个 char
类型数据的大小,通常是1个字节。因此,当你对字符指针执行 p++
操作时,它会移动到内存中的下一个字节,即字符串中的下一个字符。
这个行为基于C语言的指针算术规则,其中指针的加减操作是根据指针指向的数据类型的大小来进行的。对于指针 p
指向的类型 char
来说,每次递增都会移动 sizeof(char)
,这在绝大多数平台上是1字节。
举个例子,如果 p
指向字符串 "hello"
中的 'h'
(假设 'h'
的内存地址是1000),那么执行 p++
后,p
将会指向 'e'
(内存地址变为1001)。这就是为什么 p++
能够移动到下一个字符的原因。