squareroot 发表于 2017-12-28 14:39:50

c语言指针作业,大家帮忙看看

本帖最后由 squareroot 于 2017-12-28 14:39 编辑

#include <stdio.h>

int main()
{               
        int a,*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;
       
        }
这里只执行了一次循环,是代码问题还是软硬件问题啊?

BngThea 发表于 2017-12-28 17:00:53

我单步跟踪居然发现进入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--;
        }

squareroot 发表于 2017-12-28 21:20:32

难道for循环和while循环在这里有区别吗?{:10_258:}{:10_258:}{:10_258:}
页: [1]
查看完整版本: c语言指针作业,大家帮忙看看