题目

指针实现数组元素逆序

思路

本题用两个指针从数组首尾向中间移动,交换元素,实现逆序(与下标写法等价)。

l 指向首元素,r 指向末元素;当 l<r 时交换 *l*r,然后 l++r--

解题分析

用指针 leftright 从两端交换,与下标版第 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