打印

指针问题

[复制链接]
997|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dfsa|  楼主 | 2012-5-23 14:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<iostream>
#include<cstdlib>

using namespace std;

void main(){
const char *p1="Hello";
cout<<"p1->"<<p1<<endl;
//p1[2]='a';
p1="Hello World";
cout<<"p1->"<<p1<<endl;

char * const p2="C++";
cout<<"p2->"<<p2<<endl;
p2[1]=p2[2]='p';
cout<<"p2->"<<p2<<endl;
//p2=p1;

const char *const p3="constpoint";
cout<<"p3->"<<p3<<endl;
//p3[3]='q';
//p3=p1;
system("pause");
}

------------------------------------
上面代码通过编译,但exe程序运行出错。为什么呢?

相关帖子

沙发
xsgy123| | 2012-5-23 14:31 | 只看该作者
char * const p2="C++";//p2指向字符串常量,想通过p2来改变字符串的值是不可行的

使用特权

评论回复
板凳
火箭球迷| | 2012-5-23 14:36 | 只看该作者
[code=C/C++][/code]
char * const p2="C++"; //这里的char * const p2="C++"相当于const char * constp2="C++";
cout<<"p2->"<<p2<<endl;
p2[1]=p2[2]='p'; //所以这里就不对了
cout<<"p2->"<<p2<<endl;
//p2=p1;
因为字符窜"C++"存储在字符窜常量区,C++编译器会给你的char * const p2="C++"加上一个const
即为const char * constp2="C++";

使用特权

评论回复
地板
pkat| | 2012-5-23 14:42 | 只看该作者
p2[1]=p2[2]='p'; 这里错了,个人理解:p2[1] 跟*(++p2)是等价的,后则编译器会报错,因为定义的时候,已经声明是常量了,前者虽然可以骗过编译器,但是到内存中,就通过不了

使用特权

评论回复
5
无冕之王| | 2012-5-23 21:25 | 只看该作者
LS两位分析的在理

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

282

主题

2404

帖子

2

粉丝