2 princewhere princewhere 于 2014.08.04 17:30 提问

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

#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");传递的是一个字符串啊,为何么这样也可以呢,谢谢啦,

5个回答

u010136832
u010136832   2014.08.04 18:32

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

thebirdman
thebirdman   2014.08.04 19:43

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

redapplenn
redapplenn   2014.08.04 20:57

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

u012334850
u012334850   2014.08.08 16:14

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

cndslym88
cndslym88   2014.09.02 22:35

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!