指针常量??

jadeinsea 2003-10-17 08:43:26
const int* const ptr="asdf";是指针常量吧. 指针常量的特点是指针的地址不能修改,而指针所指向的对象的内容可以修改,在钱能的书上有:
const int* const ptr="asdf";
*ptr='b';
cout << ptr;
书上说应该输出"bsdf",在win+VC6.0下面,编译正常,但运行时候不行,原因是非法的内存操作.
Reason?
...全文
24 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jadeinsea 2003-10-21
  • 打赏
  • 举报
回复
Ok
jadeinsea 2003-10-19
  • 打赏
  • 举报
回复
char* const pc = "asdf";
// pc = "dfgh"; //Error
cout << "The original Pointer value = " << pc << endl;

*pc = 'b'; //该语句有问题,BC中可以。
cout << "The new Pointer value = " << pc << endl;


上面的程序在debug/Release 下面都不可以啊!
晨星 2003-10-18
  • 打赏
  • 举报
回复
首先,严格讲,"asdf"不能算字符数组,就是字符串常量,当然,你可能不喜欢这个翻译,那么就按照英文原文,直接叫做“String literal”好了。
其次,在我的机器上,VC6中,“int* const ptr="asdf";”不能通过编译。
如果改为“char* const ptr="asdf";”则可以通过编译。在Debug版中,的确不能正常运行。

字符串常量保存在静态存储区中,为了与C兼容,C++标准没有规定是否允许修改静态存储区中的字符串常量。而VC6的Debug版本则可能对静态存储区中的字符串常量进行了保护,导致出错。Release版下没有问题。
jadeinsea 2003-10-18
  • 打赏
  • 举报
回复
诸位的回答都不能令人信服.
首先,int* const ptr="asdf";中大"asdf"是字符数组,不时字符串.
另外,我说的是在VC+Win中不可以,但C++标准应该支持的,而且在Borland c++ for dos中就可以,我想知道的是VC不支持,还是WIN操作系统的问题.

Wolf0403 2003-10-17
  • 打赏
  • 举报
回复
const int* const ptr = new int[5];
strncpy(ptr, "asdf", 5);
*ptr='b';
cout << ptr;
daizh 2003-10-17
  • 打赏
  • 举报
回复
int* const ptr="asdf";说明ptr是指针常量,即指针的值不可以改变,但是指针指向的内容可以改变。但是对于这个语句,由于是将"asdf"字符串常量赋值给ptr,而其字符串是存放在data的const内存中,则ptr指向const区域,因而*ptr='b'是错误的。
jadeinsea 2003-10-17
  • 打赏
  • 举报
回复
Sorry,写错了
应该是:
int* const ptr="asdf";
daizh 2003-10-17
  • 打赏
  • 举报
回复
const int* const ptr="asdf";说明ptr指针本身是常量,它指向的内容也是常量,两者都不可以改变。

69,369

社区成员

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

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