2 sinat 34654042 sinat_34654042 于 2016.05.02 09:08 提问

C++ 将n个数按输入时的顺序逆序排出时遇到的问题

//将n个数按输入时的顺序逆序排出
void sort(int *p,int n)

{

int *p1,*p2,temp;

for(int i=0;i<n/2;i++)

 {
  p1=p+i;//
  p2=p+(n-1-i);//这两句为什么可以这么写??具体是什么意思?半懂不懂···
  temp=*p1;
  *p1=*p2;
  *p2=temp;
 }

}
int main()
{
int n,*p,num[20];
cin>>n;
int i;
for(i=0;i {
cin>>num[i];
}
p=&num[0];
sort(p,n);
for( i=0;i<n;i++)
{
cout<<num[i]<<" ";
}
return 0;

}

ps:不用指针的话有更好的办法吗?

5个回答

caozhy
caozhy   Ds   Rxr 2016.05.02 09:24
已采纳
 交换p[i]和p[n-1-i]
p[i]也可以写成p+i。
比如
0 1 2 3 4 5
n=6
那么交换 0(0) 5(6-1-0)
1(1) 4(6-1-1)
2 3
得到
5 4 3 2 1 0
meetings
meetings   2016.05.02 09:35

相当于把数组第一个元素和最后一个元素做交换,依次进行
p1=p+i;// 数组第一个元素地址
p2=p+(n-1-i);//数组最后一个元素地址

u013167052
u013167052   2016.05.02 09:36

p1=p+i;p2=p+(n-1-i);
p1,p2是两个指针,指向待交换的两个数字的空间,后面再做交换。
就像楼上所说的,可以把一级指针当成一个一维数组,按照数组的方式来书写。

havedream_one
havedream_one   2016.05.02 10:13

p1=p+i;//p是一个指针,就是指向一个地址,加1就指向它后面第一个地址,加2就指向它的后面的第二个地址
p2=p+(n-1-i);//同理

ZGZ1002
ZGZ1002   2016.05.02 14:26

把第一个数和最后一个交换,然后把第二个数和倒数第二个数交换,....... 最后输出的就是你想要的喽。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!