c语言简单问题!等待高手!

来源:百度知道 编辑:UC知道 时间:2024/05/18 02:10:13
下面的程序执行后输出是什么(有3行输出)?请详解。谢谢。
# include <stdio.h>
# include <stdlib.h>
# include <conio.h>
copy_string(char *from,char *to) /* copy_string 前面为何不能加 void */
{ int i=0;
for(;*from!='\0';)
{ i++; /* the use of pointer */
for(;*from++=*to++;);
}
/*上面的for语句中的第二个条件句算是一个赋值表达式,当to指向的字符串到达末尾后再下一个字符是\0,即asc2码值的0,故此时第二个条件句为假,退出循环*/
printf("%d\n",i);
*to='\0';
}

void main(void)
{
char a[]="I am a good student";
char b[]="I am a good professioner";
copy_string(a,b);
printf("%s\n",a);
printf("%s\n",b);
getch();
}

输出的结果是
2
I am a good professioner
I am a good professioner
第一个printf输出的i为:2
第二个printf输出的a为:I am a good professioner,为什么会是这个结果,因为你调用了你定义的copy_string(a,b),这样就把b的值赋值给a了。
第三个printf输出的b为:I am a good professioner。
copy_string(char *from,char *to)这是你定义的函数,所以要用void声明,不用的话你编译的时候会有一个警告。

第一行应该是copy字符串的长度
第二行是源字符串
第三行是目的字符串 即copy结果
我试了一下 copy_string 前面可以加 void
for(;*from++=*to++;); 错误
应为 *to++=*from++;

为什么不加void,因为你这里有参数的!像主程序里没有参数就可以加了!