首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-12-06 
关于指针和字符串的问题char *chchabc搞不明白ch里面应该存储地址,为啥abc能赋给ch?这是一个问题接

关于指针和字符串的问题
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);

热点排行