C语言字符数组的问题


int main()
{
char a[]="I am a girl.";
a=a+3;
}

此时这是错误的,因为数组名代表地址,这里是常量,它的值不能改变。但是下面的例子呢?

#include <stdio.h>                                    
    int main()
    {
        void change(char p[]);
        char a[] = "I am a girl.";
        change(a);
    return 0;
    }
    void change(char p[])
    {
        printf("%s", p);
        p = p + 2;
        printf("%s", p);
    }

在此例子中,change函数里,p=p+2;却是正确的,形参在接收到了实参传过来的地址后,就存在了p数组,那么p当然也代表了地址,也是常量,为什么这样就可以呢?

p不是常量,是把值拷贝过来的字符数组类型的变量