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;
}
这里只执行了一次循环,是代码问题还是软硬件问题啊?
我单步跟踪居然发现进入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--;
} 难道for循环和while循环在这里有区别吗?{:10_258:}{:10_258:}{:10_258:}
页:
[1]