关于字符指针(C++)

来源:百度知道 编辑:UC知道 时间:2024/05/22 18:57:58
char*p=“*****”;
*****这个字符串也是有内存的么?但是在这个语句之后cin>>p;在运行的时候会报错。
但是对比而言char a[20]={‘0’};char*p=a;cin>>p;
运行的时候就没有问题。(这是编程时偶遇的问题)
这是问什么呢?

char *p="*****";
这里的p是指向一个字符常量,cin>>p,那就是改变常量了,当然不可以

char a[20]={‘0’};char*p=a;cin>>p;
这里P是一个指针变量,指向了一个长度20的字符数组,cin>>p,实际上是对数组在复制,所以是可以的

顺便说一下,char *p="*****",这里编译器会在最后 自动添加一个/0
而对数组复制,最后就不会添加/0的,

p指向的是常量字符串,不可以重新赋值。

“*****”不分配内存空间.....
这里有一篇非常详细的文章,你可以看一下
http://hi.baidu.com/luoxi0209/blog/item/50364c39b1c2622597ddd8b0.html

肯定有内存(不然无法运行),但是内存地址你是不知道的。但是第二个是可以
有固定的的地址----&a。而第一个是字符串常量,不能赋值。