想请问一下各位大佬,以下两段代码的正确性。
#include
void swap(char *a, char *b){
char ch;
while(*a && *b){
ch=*a;*a=*b;*b=ch;a++;b++;}
if(*a){
{*b++=*a;*a++='\0';}
while(*b++=*a++);
}
else if(*b){
{*a++=*b;*b++='\0';}
while(*a++=*b++);
}
}
int main(){
char str1[50],str2[50];
gets(str1);
gets(str2);
swap(str1,str2);
puts(str1);
puts(str2);
return 0;
}
以上是我个人的代码
以下是某位大神的代码
#include
void swap(char *a, char *b){
int ch;
while(*a && *b)
ch=*a,*a=*b,*b=ch,a++,b++;
if(*a){
*b++=*a,*a++='\0';
while(*b++=*a++);
}
else if(*b){
*a++=*b,*b++='\0';
while(*a++=*b++);
}
}
我想问一下,这里交换两字符数组每一位内容时为什么中间参数ch定义为int型?而且运行还是正确的,不会报错。
另外,为什么while里面是*a++=*b++而不是直接*a=*b?前面在循环体里不是++了一次吗,假设进行的是第二次while判断,那么不是相当于++了两次吗,不是会有一位字符被跳过,没有交换吗?但是程序运行也没有错,而且如果是我的程序,虽然在vc6.0上运行正确,看起来也更符合逻辑但是为什么在我学校一个编程平台上显示运行时间超过限制(在*a=*b而非*a++=*b++的情况下)?