扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
从字符串头到串中心,头尾字符分别交换就可以,如下reverse
创新互联公司于2013年成立,是专业互联网技术服务公司,拥有项目做网站、网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元西吉做网站,已为上家服务,为西吉各地企业和个人服务,联系电话:13518219792
函数(自己实现)
void
reverse(char
*s)
{
int
len
=
strlen(s)
-
1;
int
i
=
0;
if
(len
=
0)
return;
for(;;;)
{
char
t
=
s[i];
s[i]
=
s[len-i];
s[len-i]=t;
i++;
if(len
-
i
=
i)
{
break;
}
}
}
第一条语句在不同的编译器下可能会有不同的结果的,因为这里存在一个顺序点的问题.
即:
在执行顺序中某些指定的点叫做顺序点。这个点上,之前所有的赋值所产生的副作用都已发生完成,并且在其后的赋值不能在该点产生任何副作用。
说白了就是:
最好不要试图在一行语句里多次改变一个变量的值,否则编译器可以随便定义改变的时机和次序
参考链接:
请注意其中顺序点的定义和介绍,和你的问题相关的描述应该是"在函数所有参数赋值之后但在函数第一条语句执行之前"这句话
要调换三个数的顺序,用排列组合原理简单的计算总共有6种方法,不知道楼主是想按其中某种方法交换变量的具体数值,还是将所有6种排序都打印出来?
例如,a=1,b=2,c=3,交换后结果为:a=3,b=1,c=2.
首先需要两个中间变量作为交换的媒介。程序如下
:
main()
{
int
a=1,b=2,c=3;
int
*x=a,*y=b,*z=c;/*定义3个指针变量,并分别赋予初值为a,b,c的地址。*/
int
*p=null,*s=null;/*x为交换中介指针变量,初始化为空*/
*p=*x;
*s=*y;
*x=*z;
*y=*p;
*z=*s;
printf("%d
%d
%d",a,b,c);
getch();
}
其实交换数不需要用到指针,直接运用变量本身也可交换。当然指针交换的好处在于函数内部可以实际交换两个数的值。
假定数据长n,输入一个整数m,
1、使数组的后n-m个元素移到前边,前m-1个元素在数组中从最后位置倒序排列
#include
"stdio.h"
main()
{
int
i,n,m,t,j;
int
d[200];
printf("\n输入n的值(n200):");
scanf("%d",n);
for(i=0;in;i++)d[i]=i;
printf("\n输入m的值(m200):");
scanf("%d",m);
printf("\n输出调整前的数据:\n");
for(i=0;in;i++)printf("%d
",d[i];
//调整程序开始
for(i=0;im;i++)
{//n-m个数前移了
t=d[0];
for(j=1;jn;j++)d[j-1]=d[j];
d[n-1]=t;
}
for(i=0;im/2;i++)
{//倒序
t=d[n-1-i];
d[n-1-i]=d[m+i];
d[m+i=t;
}
printf("\n输出调整后的数据:\n");
for(i=0;in;i++)printf("%d
",d[i];
}
其实就是内存地址的内容互换了;
p1 = a1,就是取了a1在内存中的地址给p1,这个指针,那么p1就指向了a1的那块内存。
同理p2指向a2的内存。
然后*p1是取p1内存中的内容,也就是a1,赋值给a;
然后把*p2把p2内存的内容给*p1指向的内存。然后把a的值给p2指向的内存,*p2 = a;完成值的互换。
解答:
1. 注意形式参数和实际参数的区别,主函数中的x,y是实际参数,swap函数中的a,b是形式参数。他们各有自己的存储空间,互不干扰。
2. 在程序适当位置加上输出地址的语句,即可看出为什么回到主程序后,x,y的值为什么不交换。
为了更形象,可以用图表示它们的关系:
可见,交换的只是swap函数中的a,b值,对主函数中的a,b值没有影响。
3. 修改的方法,将swap的交换变成值的交换。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流