lazy_cancer 2019-11-24 03:24 采纳率: 0%
浏览 360

关于vc6.0利用指针交换两字符数组内容的问题。

想请问一下各位大佬,以下两段代码的正确性。
#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++的情况下)?

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-11-24 10:05
    关注

    你所谓的“大神”把你整个价值观都带偏了。
    你把写程序看成了杂耍。

    评论

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建