c语言指针传递数组及返回的问题

我有这样一个程序,把一个数组的字符复制到另外一个里,正确的是#include<stdio.h>char*fun(char*,char*);intmain(void){ch... 我有这样一个程序,把一个数组的字符复制到另外一个里,正确的是
#include<stdio.h>
char *fun(char *,char *);
int main (void)
{
char words[10];
char a[20]={"hello world"};
printf("%s",fun(words,a));
}
char *fun(char *s1,char *s2)
{
char *p=s1;
while(*s2!='\0')
*s1++=*s2++;
*s1='\0';
return p;
}
为什么在被调函数里要定义一个指针p,这样的原理是什么?
为什么不能直接返回s1?也就是
#include<stdio.h>
char *fun(char *,char *);
int main (void)
{
char words[10];
char a[20]={"hello world"};
printf("%s",fun(words,a));
}
char *fun(char *s1,char *s2)
{
while(*s2!='\0')
*s1++=*s2++;
*s1='\0';
return s1;
}
这样是错的
展开
 我来答
xoalyg
2011-08-21 · TA获得超过4178个赞
知道大有可为答主
回答量:2356
采纳率:100%
帮助的人:2346万
展开全部
因为在函数fun()中语句*s1++=*s2++;,所以执行完函数后,s1指向'\0'前边的字符,如果返回s1,则只会返回一个字符(最后的字符),之所以返回p,这是因为在函数的开始时,已将指针p初始化为s1的首址,只有这样才能返回正确的地址(指针)。
追问
那为什么一开始的不是p=s1而是*p=s1呢?
追答
在声明语句中,char *p = s1;告诉编译器,p是一个字符串指针。如果这样char p = s1;,是不能通过编译的。
请阅读字符串有关指针方面的内容。
biezs
2011-08-21
知道答主
回答量:13
采纳率:0%
帮助的人:7.9万
展开全部
楼上正解。C语言中指针变量无法对整形变量直接赋值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式