清华C++教材中的一个例子,为什么运行出错

feiyangf 2001-09-21 11:46:04
在讲解const的时候,专门举了两个例子,一个对一个错,但是到VC6里,都是错的。
为什么?
char * const name="yangsj";
name[3]='C';//对
name="gfsfd";//错
第二个显然是错的,但是第一个编译没有问题,运行错!!
大师帮忙!
...全文
69 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qjwj_hl 2001-09-23
  • 打赏
  • 举报
回复
我用的就是VB6,书上的程序没错,我这里调试通过
main()
{
char * const name="yangsj";//这里是冻结name的值
//如果是const char *const name="yangsj"那就都冻结了
name[3]='C';//对
//name="gfsfd";//错
}
fancy_kevin 2001-09-21
  • 打赏
  • 举报
回复
name指向的常量,处于数据段中,只读。
char *p = new char[10];
strpcy(p."hello");
char * const name = p;
name[3] = 'c';//正确
tccb 2001-09-21
  • 打赏
  • 举报
回复
错误原因在于没有为name申请字符串空间
改为定义:
const char name[]="yangsj";
gop 2001-09-21
  • 打赏
  • 举报
回复
name 指向的字串"yangsj"在数据区,windows不允许修改其内容
我不是大明 2001-09-21
  • 打赏
  • 举报
回复
no chinese input!
fancy_kevin 2001-09-21
  • 打赏
  • 举报
回复
对于静态变量,常量他们是在程序映射进内存时就被分配好了,通常在数据段中就像
.DATA
str DB 1,2
堆是自由空间,他的分配和释放由你决定,如new(),delete(),malloc(),free()。
栈一般大小固定(可编译时指定),参数入栈,临时对象的生成使用的是栈。
feiyangf 2001-09-21
  • 打赏
  • 举报
回复
数据区,堆,栈这些东西有什么特点,
变量声明赋值时怎么决定它在什么地方?
有人可以总结一下吗?比方说什么时候这个变量被放到栈里?什么时候在堆上?
静候佳音

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧