N简单,什么是CONST修饰的指针不可以赋给不用CONST修饰的指针呢?有代码。。。谢谢。。。(菜鸟没有分了)

TemplatesGuy 2005-03-25 01:51:26
#include <iostream>

using namespace std;

const int ArSize = 8;
int sum_Arr(const int* begin,const int *end);

int main()
{
int Ar[ArSize]={1,2,4,8,16,32,64,128};
int sum=sum_Arr(Ar,Ar+ArSize);
cout<< "The Sum is :" <<sum <<endl;
}
int sum_Arr(const int *begin,const int *end)
{
int total=0;
//const int * Pt;
for (const int *Pt=begin;Pt!=end;Pt++)
{
total=total + *Pt;
}
return total;
}


=============
为什么*Pt必须是cons修饰的呢


我找了一会才找到错误的。原来我不是const修饰的。

谢谢
...全文
119 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bianliuwei 2005-03-26
  • 打赏
  • 举报
回复
有个问题,常量指针和指针常量的比较,哪天我想告诉你的,单位上网不方便就没说。你可以看一下这方面的知识,就能解决你的疑问了。
指针常量它指的值能改变。常量指针的值才不能改变。
TemplatesGuy 2005-03-25
  • 打赏
  • 举报
回复
@bianliuwei
说明pt是可以被改变的(非常量)
-------------------
谢谢关注。
pt确实是非常量的呀!也就是说pt是可以别改变的。
const的作用仅仅是不能通过pt修改pt所指向的值。
就是:
*pt=*pt+1;//错误的
pt=&pt+1;//正确的,但是现在的*pt已经!=上面的*pt了。


======================
再问。如何修改指针本身的地址值呢?
比如:
&pt=&pt+1;
当然,这句是错误的,我想的是如何实现如此的效果。

谢谢。
whyglinux 2005-03-25
  • 打赏
  • 举报
回复
因为C++标准规定:const类型可以自动转化为同类型的非const类型,反之则不可。
bianliuwei 2005-03-25
  • 打赏
  • 举报
回复
因为const int * begin定义了begin是常数指针,而pt是接受begin赋值的,如pt不用const修饰,说明pt是可以被改变的(非常量),意即begin是可以改变的,这和begin定义为const矛盾,故pt必须用const声明,那是一种承诺。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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