请将下面这小段C语言源程序逐行作注释。

来源:百度知道 编辑:UC知道 时间:2024/06/26 04:03:53
int fun(char *str,char *substr)
{
int n;
char *p,*r;
n=0;
while(*str)
{
p=str;
r=substr;
while(*r)
if(*r==*p)
{
r++;
p++;
}
else break;
if(*r=='\0') n++;
str++;
}
return n;
}

我不明白怎么用指针表示数组。while(*p)这是什么循环?另外,p=str;这是将*str数组整体复制到*p中,还是将*str数组首元素赋值到*p首元素?

你说说的while(*p),就是说,只要当*p所指向的数据不为空,就执行while的循环,举个例子
char *p,a[6]={"asdfg"};
int i=0;
p=a;
while(*p)
{
i++;
p++;
}
这样,P指向数组a的首地址,p每自加一次,*p指向下一个元素,其中a,s,d,f,g均不为空,当*p指向'/0'时,即所说的为空,这样while()循环结束,这样说明白了?
另外你说的p=str,只是将定义的指针p指向你所定义的str[]这个数组的首地址,可以这样比喻,假如str是你家的房子,p就是你家的门牌号,这样调用*p和直接调用str是一样的,他们同时指向同一段内存空间,所以不存在赋值和复制这一说。只是叫法不一样罢了。

while(*p)=while(*p!=0)
将*str数组整体复制到*p中