关于一个指针的问题,目前真的想不明白

#include
int main()
{
int i,strlen(char *s);
i=strlen("hello azhen");
printf("%d\n",i);
}
int strlen(char *s)
{
int n;
for(n=0;*s!='\0';s++)
n++;
return n;
}
改编自c primer plus的一个例子,重新编写一个strlen的函数,可是我不明白为什么strlen("hello azhen");也能实现,形参是指针,实参也要是指针才对啊,strlen("hello azhen");传递的是一个字符串啊,为何么这样也可以呢,谢谢啦,

没看懂你想问什么,strlen就是计算字符串的长度啊 ,有什么问题吗?

"hello azhen"是一个字符串,作为实参传递的是它的首地址

字符串是字符数组,它的首地址是一个常量指针,实参传递的就是这个常量指针。

字符串大多传送首地址,除非特殊要求,会传送整个字符串。

strlen("hello azhen")
这个调用的时候,"hello azhen"这个字符串是一个常量,它是存在的。在程序编译的时候,会把这个常量字符串放到静态区去,调用的时候会传一个地址给strlen。你可以在strlen里面 %p 输出输出参数,看地址。