有n个整数,使前面各数顺序向后移m个位置

5.题目如下:有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前m个数 。写一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个整数。
我的代码如下。定义指针怎么也定义不对,另外报错中显示“p cannot be used as a function”

#include <stdio.h>
int main()
{void lstz(int *p,int m,int n);
int n,m,i=0;
printf("请输入n和m:");
scanf("%d%d",&n,&m);
int a[n];
printf("请输入这n个整数:");
for(i=0;i<n;i++)
{scanf("%d",&a[i]);
 } 
int *d=&a;
lstz(d,m,n);
printf("得到的n个整数是:");
for(i=0;i<n;i++)
{printf("%d ",*d);
}
}
void lstz(int *p,int m,int n) 
{int i=0,j;
for(j=0;j<m;j++)
{p(j)=p(i++);  
  }
for(j=m+1;j<n;j++)
{p(j)=p(i++);
  }
}

img

p(j)=p(i++)
这里数组下标是方括号
p[j]=p[i++]
别的类似

#include <stdio.h>

void lstz(int *p,int m,int n);

int main()
{
    int n,m,i=0;
    printf("请输入n和m:");
    scanf("%d%d",&n,&m);
    int a[n];
    printf("请输入这n个整数:");
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    } 
    lstz(a,m,n);
    printf("得到的n个整数是:");
    for(i=0;i<n;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
    return 0;
}

void lstz(int *p,int m,int n) 
{
    int temp[m];
    for(int i = 0; i < m; i++){
        temp[i] = p[n - m + i];
    }
    for(int i = n - m - 1; i >= 0; i--){
        p[i + m] = p[i];
    }
    for(int i = 0; i < m; i++){
        p[i] = temp[i];
    }
}