在前面,我们通过让数组首位交换的方式,实现了数组的逆序,那,在学习了指针之后,我们该如何运用指针实现数组的逆序呢。
同样的,我们的思路还是使用首位对应交换的方式,只不过,在此时,我们可以选用指针代替数组的首尾元素了
#include <stdio.h>
int main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int *p1 = a; // 指向数组的第一个元素下标
int *p2 = a + sizeof(a)/sizeof(a[0]) - 1; // 求出最后一个元素的下标
while (p1 < p2)
{
int tmp = *p1;
*(p1++) = *p2;
*(p2--) = tmp;
}
int i;
for (i = 0; i < 10; i++)
{
printf ("%4d", a[i]);
}
printf ("\n");
return 0;
}
程序里,我们的大致过程还是和以前一样,没有什么多大的变化的,唯一不同的是我们使用了指针代替了数组,使用指针代替数组的好处就是,当数组里的元素发生变化时,我们的指针所指的地址可是不会变化,这就使我们的操作变得稳定。在使用sizeof求最后一个元素的下标中,sizeof这个关键字,是用来求空间大小的一个关键字,它能告诉我们,我们所使用的一个变量所占的空间大小。因为sizeof(a)求出了整个数组所占用的空间,当/它的类型时,我们就可以得到数组a的长度了,同时由于数组的下标都是从0开始的所以在计算最后一个元素的下标时,一定要记得减一。
最后显示的结果为: 10 9 8 7 6 5 4 3 2 1
是不是已经完全逆序过来了呢。动手来操作一下吧!