关于#数组#的问题,如何解决?(语言-c语言)

求问:

img


图中定义a数组长度最大为10,又定义了一个b数组记录a数组的值,当a数组长度变量大于10的时候,不是应该不能把10以上的数据输入a数组中吗,为什么让b的数组长度大于10,就可以a数组的数据长度大于10呢

在函数ArrayShift()里定义b[MAXN]数组,而不是b[n],c不支持变长数组的定义。

其实根本用不到另一个数组b
这么写

void ArrayShift(int a[], int n, int m)
{
    if (m == 0 || n == 1)
        return;
    int x = a[n - 1];
    for (int i = n - 2; i <= 0; i--)
        a[i + 1] = a[i];
    a[0] = x;
    ArrayShift(a, n, m - 1);
}

仅供参考

img

img

img

#include <stdio.h>
void ArrayShift(int *a, int n, int m);
int main(int argc, char *argv[])
{
    int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int n = 10, m;

    for (int i = 0; i < n; i++)
    {
        if (i != 0)
            printf(" ");
        printf("%d", a[i]);
    }
    puts("");
    scanf("%d", &m);
    ArrayShift(a, n, m);
    for (int i = 0; i < n; i++)
    {
        if (i != 0)
            printf(" ");
        printf("%d", a[i]);
    }
    puts("");

    return 0;
}

void ArrayShift(int *a, int n, int m)
{
    int b[n];
    int k = m % n;

    for (int i = 0, j = k; i < n - k; i++, j++)
    {
        b[j] = a[i];
    }

    for (int i = n - k, j = 0; i < n; i++, j++)
    {
        b[j] = a[i];
    }

    for (int i = 0; i < n; i++)
    {
        a[i] = b[i];
    }
}