void f(int*x,int*y)
{int t;
t=*x;*x=*y,*y=t;
}
main()
{int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;
p=a;q=&a[7];
while(p<q)
{f(p,q);
p++;
q--;
}
for(i=0;i<8;i++)
printf("%d",a[i]);
}
首先数组a: 1 2 3 4 5 6 7 8
指针p和q赋初始位置: p q
然后进入while循环:
一、因为p<q ,所以执行f(p,q);然后1和8交换,
变成 8 2 3 4 5 6 7 1
然后p的位加1,q减1: p q
后面的一样,直到p的位置大于或等于q的位置就跳出whille循环。
最后输出a数组元素!
如果p的值比q的值小,执行while循环内的方法,函数f(p,q)方法,交换p、q的值,p初始值是a[0],q的初始值是a[7],p++,就是数组下标加1
初始时,p指数组的第一个元素即a[0],q指数组的最后一个元素;
while循环中:当p的地址值(简单明了的说就是数组的下标值)小于q时,p与q所指这地址的值互换,直到p的下标大于q的下标时,循环结束。
结果就是数组的倒序输出(87654321).
当p小于q的时候,p和q交换一下位置。上面的函数就是用来交换两个数据的。然后p移动到第二个位置,q往倒数第二个位置移动。跟你将通俗一点,就是8比1大,两个交换位置。
然后7和2比较,7大于2交换位置,最后下来87654321。你要输出后看看结果就知道那个while是干啥的,多敲敲多练练!!!
首先将a[0]的地址赋给p,将a[7]的地址赋给q,比较pq的大小,当p小于q的时候,p和q指向的值交换一下位置,然后地址增和减,到p大于q的时候退出循环。
while循环实现是将数组前后对称位置的数进行比较,如果后面大,则交换两则的位置