| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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--;
 
 -         }
 
  复制代码 
 
 
 |   
 
 
 
 |