const有关问题

const问题
#include<iostream>
using namespace std;

void Print(char *p);

int main()
{
char *p="dfgfg";
  Print(p);
return 0;
}

void Print(char *p)
{
cout<<p;
}


p是指向常变量的指针吗?如果是的话,那么为什么能调用void Print(char *p)
函数。。。。形参是指向指向非const变量的指针,而实参是指向const变量的指针啊。。。应该是非法的

如果不是指向常量的指针的话,那我在Print函数里为什么不能通过指针P改变它所指向的变量的值?


求大神教我。。。

------解决方案--------------------
main中的变量p是指向常量字符串的指针

Print中的p是一个字符指针,可以传递给它字符串指针,因为它们的类型都是一样的。这里并没有规定它不能接受一个指针常量参数。

常量只是不能被更改,不是不能被传递。所以Print函数接受p指针没有半点问题——它又没有试图更改p所指向的内容。如果你想要在里面改变它,那你就会发现系统不肯干。
------解决方案--------------------
探讨

我把char *p="dfgfg";改为const char *p="dfgfg";。。。。。。

编译就会出错:error C2664: 'Print' : cannot convert parameter 1 from 'const char *' to 'char *'

难道const常量与普通常量不一样。。。。