题目
指针实现数组元素逆序
思路
本题用两个指针从数组首尾向中间移动,交换元素,实现逆序(与下标写法等价)。
l 指向首元素,r 指向末元素;当 l<r 时交换 *l 与 *r,然后 l++、r--。
解题分析
用指针 left、right 从两端交换,与下标版第 32 题相同算法。
完整程序
#include <stdio.h>
int main(void)
{
int n, a[200];
if (scanf("%d", &n) != 1 || n < 1) {
return 1;
}
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
int *l = a, *r = a + n - 1;
while (l < r) {
int t = *l;
*l = *r;
*r = t;
l++;
r--;
}
for (int i = 0; i < n; i++) {
printf("%d%c", a[i], i + 1 < n ? ' ' : '\n');
}
return 0;
}
运行示例
输入:
4
1 2 3 4输出:
4 3 2 1