C函数传数组做参数时,怎样传值而不是传地址,该如何处理

C函数传数组做参数时,怎样传值而不是传地址
C/C++ code
#include <stdio.h>
void test(int p[])
{
    p[0]=1;
    printf("%d",p[0]);
}

int main()
{
    int p[1];
    p[0]=0;
    printf("%d",p[0]);
    test(p);
    printf("%d",p[0]);
}


以上程序输出011,我知道蜕化为指针的问题
希望进test的时候把数组p复制一份,而不是改变指针p指向的值,怎么用最简单的方法实现?

------解决方案--------------------
最简单的做法是把这个数组定义在一个结构内,然后将该结构作为一个参数传入。
------解决方案--------------------
C/C++ code

template<int N>
void test(int (&p)[N]);