关于指针和字符串的有关问题

关于指针和字符串的问题
char *ch;
ch="abc";
搞不明白ch里面应该存储地址,为啥"abc"能赋给ch?这是一个问题
接上面的代码加入cout<<ch; 为啥能输出"abc"?这是第二个问题
代码改为:
char *ch;
cin>>ch;
cout<<ch;
为啥就不行了,编译可过,但执行时提示程序错误,要关闭。
想知道原因,求高手解答。

------解决方案--------------------
第一个ch = "abc",其实就是让指针指向"abc"字符串常量的地址,自然不会报错

第二个你对空指针进行操作


------解决方案--------------------
1."abc"是一个常量字符串,也有地址的。char *ch = "abc";的意思就是将常量字符串的首地址(也就是字符a的地址赋给ch)。
2.因为ch指向一个常量字符串,故这个地址的内容不可修改,所以cin>>ch;是非法的。改成char ch[10];就可以了
------解决方案--------------------
引用:
1."abc"是一个常量字符串,也有地址的。char *ch = "abc";的意思就是将常量字符串的首地址(也就是字符a的地址赋给ch)。
2.因为ch指向一个常量字符串,故这个地址的内容不可修改,所以cin>>ch;是非法的。改成char ch[10];就可以了
修正一下2,你的ch是个野指针,指向未知,所以向其写入内容的行为未定义。
------解决方案--------------------
up
第一个是将一个指向常量区的指针赋值给ch,
第二个没有初始化, ch指向哪块内存?
------解决方案--------------------
char *ch;
cin>>ch;

野指针
------解决方案--------------------
但指针为一个字符串指针时,会将字符串输出。具体的应该是对<<做了重载的
------解决方案--------------------
一般都不输出地址的, 如果想输出 可以用printf("0x%d", ch);