|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 squareroot 于 2017-12-28 14:39 编辑
#include <stdio.h>
int main()
{
int a[10],*p,i;
int reserve(int *a,int n);
p=a;
for(i=0;i<10;i++)
{
scanf("%d",p++);
}
reserve(a,10);
p=a;
for(i=0;i<10;i++)
{
printf("%d ",*p++);
}
return 0;
}
int reserve(int *a,int n)
{
int *p,*q,*d,temp,h;
h=(n+1)/2;
d=a+h;
for(p=a,q=a+n-1;p<=d;p++,q--);
{
temp=*p;
*p=*q;
*q=temp;
}
return 0;
}
代码照抄的,为什么运行结果会变成这样,只是把3,6交换,调试是在
for(p=a,q=a+n-1;p<=d;p++,q--);
{
temp=*p;
*p=*q;
*q=temp;
}
这里只执行了一次循环,是代码问题还是软硬件问题啊?
我单步跟踪居然发现进入for循环的时候a的地址没有变化,但是p居然是a+7,而q居然是a+4?!
用while循环改写后就没有这个问题
- p = a;
- q = a+n-1;
- while (p < d)
- {
- temp=*p;
- *p=*q;
- *q=temp;
- p++;
- q--;
- }
复制代码
|
|