1.用一级指针实现strlen
int my_strlen1(char *str)
{
int count = 0;
int i = 0;
if (NULL == str)
{
return -1;
}
while (*str != '\0')
{
str++;
count++;
}
printf("strlen1.str : %s\n", str);
return count;
}
int main()
{
char *str = "helloworld";
printf("%d\n", my_strlen1(str));
printf("main.str : %s\n", str);
return 0;
}
2.用二级指针实现strlen
int my_strlen2(char **str)
{
int count = 0;
int i = 0;
if (NULL == *str)
{
return -1;
}
while (**str != '\0')
{
(*str)++;
count++;
}
printf("strlen2.str : %s\n", *str);
return count;
}
int main()
{
char *str = "helloworld";
printf("%d\n", my_strlen2(&str));
printf("main.str : %s\n", str);
return 0;
}
传入二级指针时会把main函数中str指针的指向改变,而传入地址时会在函数内部生成一个指向该地址的指针副本,在函数内操作的实际上是这个副本,所以不会对main函数中str指针的指向造成影响。