谁能把这个程序给解释一下,,,

华山论剑2014 2013-01-01 10:22:30
#include<iostream>
#include<string>
using namespace std;
void fun(char*w,int m)
{
char s,*p1,*p2;
p1=w;
p2=w+m-1;
while(p1<p2)
{
s=*p1++;*p1=*p2--;*p2=s;}
}
void main()
{
char a[]="1234567";
fun(a,strlen(a));
cout<<a<<endl;
}

...全文
219 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯狂的红豆 2013-01-01
  • 打赏
  • 举报
回复
你这段代码是要通过函数传参的形式实现一个数组的两头相对位置的元素的对调,但我运行你的代码没出想要的结果 这个程序要实现的结果是你重新输出数组会显示:7654321

void fun(char*w,int m)
{
	char s,*p1,*p2;
	p1=w; //p1指向数组的起始地址
	p2=w+m-1;  //将p2指向数组的末尾地址
	while(p1<p2)
	{
		s=*p1++; //但是你的这句话就不对了,你在这里将p1自增会作用在下一句上的
		*p1=*p2--;
		*p2=s;
	}
}
不要在交换语句中掺入自增与自减运算符。 s=*p1; *p1=*p2; *p2=s; p1++; p2--; 我试验过了 这么改是会出现正确结果的
图灵狗 2013-01-01
  • 打赏
  • 举报
回复
这段程序写的不好,可以参考我的博文(http://blog.csdn.net/turingo/article/details/8124432)实现类似的功能。
引用 楼主 first_1234 的回复:
#include<iostream> #include<string> using namespace std; void fun(char*w,int m) { char s,*p1,*p2; p1=w; p2=w+m-1; while(p1<p2) { s=*p1++;*p1=*p2--;*p2=s;} } void main() { ch……
ActorKeyy 2013-01-01
  • 打赏
  • 举报
回复

#include<iostream>
#include<string>
using namespace std;
void fun(char*w,int m)
{
    char s,*p1,*p2;
//设p1为参数字符(串)w的起始地址
    p1=w;
//设p2为w起始地址后第m-1个位置的地址
    p2=w+m-1;
//设置循环条件,即在上述复制地址后,p1如果在p2前面就进入循环
    while(p1<p2)
    {
//s为p1地址当前的字符,随即p1跳跃到下一个地址(递进1),再将p1地址(递进后的地址)处的字符赋值为p2处的字符,p2随即跳到上一个地址,再将新的p2地址处赋值为s的字符。
      s=*p1++;*p1=*p2--;*p2=s;
    }
}
/*
从上述函数的代码来看,这个函数的作用是把选定字符串首尾字符不变,而中间部分实际也变成首尾字符的交替循环。
*/

void main()
{
    char a[]="1234567";
    fun(a,strlen(a));
    cout<<a<<endl;
}
a_mu_lol 2013-01-01
  • 打赏
  • 举报
回复
void fun(char*w,int m) { char s,*p1,*p2; p1=w; p2=w+m-1; while(p1<p2) { s=*p1;*p1=*p2;*p2=s; p1++;p2--; } }
walker1222 2013-01-01
  • 打赏
  • 举报
回复
p1=w; // p1指向'1'所在地址 p2=w+m-1; // p2指向'7'所在地址 while(p1<p2) { s=*p1++; // s='1' p1指向'2'所在地址 *p1=*p2--; // '2'替换成'7'.. p2指向‘6’所在地址 *p2=s; // '6'替换成'1' 结果是 1734517 我去,你是想实现首尾互换么,建议先互换好再自增自减…… temp = *p1; *p1=*p2; *p2 = temp; ++p1; --p2; }

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧