C语言用指针实现数组元素循环移动

img


实现数组向左移

供参考:

#include <stdio.h>
#define N 20
int main()
{
    int a[N], i, n, m, t, * p, * q;
    scanf("%d", &n);//输入整数个数
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);
    p = a;
    scanf("%d", &m);//输入移动位数
    
    /***** 首先逆置数组前m个元素 *****/
    q = a + m - 1;  //尾指针
    for (p = a; p <= a + (m - 1) / 2; p++, q--)
        t = *p, * p = *q, * q = t;

    /***** 逆置余下n-m个元素 *****/
    q = a + n - 1; //尾指针
    for (p = a + m; p <= a + (n - 1 + m) / 2; p++, q--)
        t = *p, * p = *q, * q = t;

    /***** 逆置整个数组 *****/
    q = a + n - 1; //尾指针
    for (p = a; p <= a + (n - 1) / 2; p++, q--)
        t = *p, * p = *q, * q = t;
    
    //输出数组
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
    printf("\n");
    return 0;
}

while(m--)
{
    t=a[0];
    for(i=0;i<n-1;i++)
        a[i]=a[i+1];
    a[i]=t;
}