题目

从标准输入读入 n 个整数,使用纯指针方式(双指针相向收缩)实现数组元素的就地逆序并输出。

输入格式:第一行输入元素个数 n;第二行输入 n 个整数。

输出格式:在一行中输出逆序后的数组,以空格分隔,末尾换行。

数据范围与约定:1 ≤ n ≤ 500。

思路与算法

1. 头尾指针界定
左指针指向数组首地址 int *l = a;,右指针指向尾元素地址 int *r = a + n - 1;。

2. 解引用交换
循环条件为 l < r。交换解引用值 int t = *l; *l = *r; *r = t;,然后左右指针同时靠拢 l++; r--;。

完整程序

#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]);
    }

    // 双指针反转:l 指向首元素,r 指向尾元素
    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