CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

关于const的问题?分不够再加。

楼主banquet(Everything will be well)2004-04-03 12:43:25 在 C/C++ / C++ 语言 提问

1)  
  const   int*   const   f()  
  {  
  static   int   i;  
  return   &i;  
  }  
   
   
  const   int*   const   ccpi   =   f();     //   通过。  
  const   int*   cpi   =   f();                   //   也通过。为什么?  
  2)   //   aa.h  
      const   int   i   =   10;               //   在编译期间这个符号常量存在哪里?  
                                                        //关于i是const修饰的信息存在哪里?  
                                                    //   编译器怎么知道它有const修饰  
  3)按位const怎么解释?能举个例子吗? 问题点数:50、回复次数:17Top

1 楼angelo23(angelo)回复于 2004-04-03 12:52:02 得分 15

1)f()返回的是一个指向常量的指针,所以用一个指向常量的指针(e.g.,   const   int*)即可,至于这个指针是不是const的,那无所谓。注意指向常量的指针和常量指针的区别,以int为例,前者是const   int*,后者是int   *   const,而指向常量的常量指针则是const   int   *   const,就像你用的那个ccpi  
  2)这个常量可能在编译时就被替换掉,也可能不被替换掉。你都已经写了const了,编译器当然知道它是const的,所以你既不可以修改它,也不可以用一般的指针指向它,必须用指向常量的指针指向它  
  3)按位const是甚?Top

2 楼eboywy(飞影)回复于 2004-04-03 13:40:51 得分 5

1)  
  const   int*   const   f()  
  {  
  static   int   i;  
  return   &i;  
  }  
   
   
  f()返回的是一个指向常量的指针常量。  
   
   
  const   int*   const   ccpi   =   f();     //   通过。因为也ccpi也是指向常量的指针常量  
  const   int*   cpi   =   f();                   //   也通过。因为cpi是指针常量  
   
  Top

3 楼eboywy(飞影)回复于 2004-04-03 13:41:36 得分 0

2,好像是放在静态内存区。  
  3,??Top

4 楼zhouqingyuan(浪帆)回复于 2004-04-03 13:54:52 得分 10

1,常量当然可以赋给一个非常量变量啊,  
  只是一个变量不能被赋给一个常量(const修饰)  
  2。因为有const修饰,所以编译器就把它编译成常量,  
  一直存储在一个单独的地方,不编译就不改变的。  
  3。没有听说过,只听过什么按位拷贝,  
  Top

5 楼sharkhuang(走吧走吧!人总会慢慢长大~)回复于 2004-04-03 14:39:04 得分 5

没有说不能把const   值付给非const啊!  
   
  只是const不能当左值!意思是不能被负值.Top

6 楼xspspring(辛巴)(坚持学习:奋斗:锻炼身体—超越自我:)回复于 2004-04-03 15:11:39 得分 0

“   const   int*   cpi   =   f();             //   也通过。因为cpi是指针常量     ”  
   
  不是吧??  
  Top

7 楼w3guy(何去何从)回复于 2004-04-03 15:15:16 得分 10

区分指针常量和指向常量的指针的小窍门:  
  const   int   *p;               //   指向常量的指针:指针可修改,指针所指的内容不能修改  
  int   *   const   p;             //   指针常量:指针不可修改,指针所指的内容可以修改  
  const   int*   const   p;   //指向常量的指针常量,指针和指针所指的内容都不能修改  
   
  区分方法,将定义从*号分成两部分,如果变量类型和const   在同一边是指向常量的指针,如果变量类型和const   不在同一边是指针常量,如果两边都有是指向常量的指针常量。  
   
  const   int*   cpi   =   f()   能通过是因为cpi   是指向常量的指针(不是因为它是指针常量)  
  然而   int   *   const   cpi   =   f()   就不能通过,因为此时cpi   是指针常量,一个指向常量的指针是不能赋给它的。  
  Top

8 楼banquet(Everything will be well)回复于 2004-04-03 16:54:21 得分 0

按位const   在c++编程思想中有!Top

9 楼cgsw12345(cgsw)回复于 2004-04-03 17:20:17 得分 0

www.kubou.y365.com   ^_^Top

10 楼lxh1010(匿迹)回复于 2004-04-03 17:42:18 得分 0

完全同意w3guy的Top

11 楼sharkhuang(走吧走吧!人总会慢慢长大~)回复于 2004-04-03 18:24:23 得分 0

函数也是const的!编译的时候地址就固定了!Top

12 楼jinone()回复于 2004-04-04 15:40:06 得分 5

按位const怎么解释?举个例子?  
   
  按位const,   也就是bitwise   const,其实应该就是const   X     x();X   是某一个类,这或许就是针对按成员const,也就是memberwise   const或logical   const,   的一种提法!  
  如果是按位const的话,那么一个成员函数就不大可能改变数据成员!  
  而按成员const话,则应该有至少有三种方法来修改数据成员!  
   
  Top

13 楼Atomictry(天影)回复于 2004-04-04 17:31:48 得分 0

我觉得可以这样理解比较简单。  
  f()可以认为是一个常量,例如10。  
  所以   const   int   i   =   10;   和   int   =   10都是正确的。Top

14 楼jinone()回复于 2004-04-04 17:40:24 得分 0

楼上  
  const   int   i   =   10;   和   int   =   10都是正确的。  
  这是什么意思呀?Top

15 楼5420(薰衣草)回复于 2004-04-04 18:39:33 得分 0

区分指针常量和指向常量的指针的小窍门归纳:  
  格式:(类型)   *   [const]   指针名  
  说明:指向(类型)的指针[常量]  
   
  Top

16 楼5420(薰衣草)回复于 2004-04-04 18:48:11 得分 0

倒数第三楼的那句"所以   const   int   i   =   10;   和   int   =   10都是正确的。"  
  可能是这样的"所以   const   int   i   =   10;   和   int   i   =   10都是正确的。"Top

17 楼wdslhr(我爱西湖)回复于 2004-04-04 21:28:23 得分 0

在用动态连接库时,当要生成.DLL文件时,有的书上说要加入.def文件,不知.def文件怎么生成呀???Top

相关问题

  • 100分,不够加帖!
  • 100分!不够再加
  • 100分!不够再加
  • 求助,分不够再加
  • HELP!!!不够再加分
  • 放分了,不够再加
  • 100分不够再加!
  • 100分,不够在加
  • 100分DHTMLEDIT.SAVEDOCUMENT,UP有分,不够再加.
  • 高分求救,分不够再加!

关键词

  • 指针
  • 修改
  • 编译器
  • 编译
  • 文件
  • 内容
  • 常量
  • 指向
  • cpi
  • const

得分解答快速导航

  • 帖主:banquet
  • angelo23
  • eboywy
  • zhouqingyuan
  • sharkhuang
  • w3guy
  • jinone

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo