关于常量的三个问题

hshhgh 2005-07-14 11:21:01
1,常量的定义如果放到某个函数内部(即局部),那么这个这个常量
a,是存储在哪里的(如堆,栈,全局数据区)?
b,它的生命期是怎样的?
c,其可见性是怎样的(只在本函数内可见吗)?
2,常量的定义如果放到所有函数外部(即全局变量定义的位置),那么这个这个常量
a,是存储在哪里的(如堆,栈,全局数据区)?
b,它的生命期是怎样的?
c,其可见性是怎样的?
书中好像都没有讲到,谢谢个位!
...全文
123 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
庄鱼 2005-07-15
  • 打赏
  • 举报
回复
常量的概念,通常是语言层面上的,实际在编译的时候,依据不同的编译器会采用不同的策略。常见的有两种:一种时段内地址法,与普通变量相类似,只是对其读写加以限制;一种是置换法,即用具体内容直接替换相应常量标识。
1、不应该在全局数据区,生命期与策略相关(通常与调用关系密切,当返回值为常量表达式时,与调用函数一致,非常量表达式时与普通变量相同),仅在函数内可见。
2、全局区,整个程序生命期,所有可视(但在子函数内,可被同名变量屏蔽)。
megaboy 2005-07-15
  • 打赏
  • 举报
回复
有三种常量:#define、const和enum,其中#define定义的常量在预处理之后就不存在了,这个不需要再讨论,下面讨论后两种常量:

1,常量的定义如果放到某个函数内部(即局部),那么这个这个常量
a,是存储在哪里的(如堆,栈,全局数据区)?//const存储在栈,enum存储在全局数据区
b,它的生命期是怎样的? //两者都是函数结束就消失了
c,其可见性是怎样的(只在本函数内可见吗)?//都在本函数内可见
2,常量的定义如果放到所有函数外部(即全局变量定义的位置),那么这个这个常量
a,是存储在哪里的(如堆,栈,全局数据区)? //两者都存储在全局数据区
b,它的生命期是怎样的? //两者在程序运行期内都存在
c,其可见性是怎样的? //所有函数都可见两者
defyer007 2005-07-14
  • 打赏
  • 举报
回复
sorry,楼主说的是常量啊 
常量的话,应该看编译器了,一般在编译的优化阶段使用临时变量来代替
defyer007 2005-07-14
  • 打赏
  • 举报
回复
1,常量的定义如果放到某个函数内部(即局部),那么这个这个常量
a,是存储在哪里的(如堆,栈,全局数据区)?
b,它的生命期是怎样的?
c,其可见性是怎样的(只在本函数内可见吗)?
2,常量的定义如果放到所有函数外部(即全局变量定义的位置),那么这个这个常量
a,是存储在哪里的(如堆,栈,全局数据区)?
b,它的生命期是怎样的?
c,其可见性是怎样的?
answer:
1.a:stack
1.b:函数的周期结束它就结束
1.c:当然只在本函数内可见

2.a:全局数据区
2.b:随程序的结束而结束
2.c:对所有的函数可见
foochow 2005-07-14
  • 打赏
  • 举报
回复
这个书上当然有拉,楼主不仔细
边城狂人 2005-07-14
  • 打赏
  • 举报
回复
常量存储在哪里,这个问题对于用C编程来说,是不重要的。不管如何,反正我不知道。

常量如果定义在函数内部,其生命期应该只在从它定义的位置起到语句块结束。但至于是它在整个程序中只分配一次空间,还是每次执行到这个函数的时候都重新分配,就不知道了,反正这也跟写代码没多大关系。当然,这种情况下只在函数内可见,你自己可以写小段代码来试验。

如果常量是定义为全局的,那么生命期肯定是贯穿整个程序的运行期间。其可见性当然也是谁都可见的(被局部变量或者常量隐藏的除外)。
xjp6688 2005-07-14
  • 打赏
  • 举报
回复
看C++PRIMER

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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