| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1806 人关注过本帖
标题:常量的问题不太懂
只看楼主 加入收藏
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
以下是引用zhanghuan_10在2006-12-7 18:25:39的发言:
define N 5这个是个宏,在预编译的时候会将所有的N替换成5, 并不占用内存!
常量在内存中没有地址
java我不懂!呵呵!

任何东西都有地址,只不过有的你不能寻址


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-12-09 14:02
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
以下是引用guzhou在2006-12-8 19:46:13的发言:

宏定义也算常量吧.//不是
常量都应该占内存
如c++: const int a=1;
int b=a;
好象不占,直接替换.

有可能站用,如果,你以后只把a当一个常量用,则不会分配空间
如果,以后的程序拿它寻址了,例如const int *const tmp=&a;
则给内存


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-12-09 14:04
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
以下是引用百年不亮在2006-12-8 21:26:37的发言:

因为5是常量,N就是5的另一个名字罢了,5会写到程序的静态数据区,
也就占用了内存,所以N也可以说占用了内存(在汇编层5是一个立即数).

斑竹也知道吧,只是没有用这种方式理解

你都已经说了,N是5的别名,为什么还分配空间呢
这个N在符号表里面,当有N时就用5代替
不是知道你们把符号表里面的站位算不算分配空间,
但是我从没见过哪本书或者文章把符号表里面的东西
也算分配空间


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-12-09 14:07
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
以下是引用forice在2006-12-9 11:07:21的发言:
预编译不占用内存空间,如果定义const int a=5;就占用内存空间了(const在预编译时会出错)


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-12-09 14:09
小牛
Rank: 1
等 级:新手上路
威 望:1
帖 子:434
专家分:8
注 册:2006-10-1
收藏
得分:0 

大家说了这么多,把小弟弄糊涂了,到底该怎样理解。
define N 5 这个5到底占不占空间,若占用,怎样寻址。


本店经营各类国际品牌运动鞋,板鞋,休闲鞋,有李宁,nike,匹克,阿迪达斯。
2006-12-10 18:22
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
不占用

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-12-11 09:39
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
除了在符号表里面的东西,剩下任何东西都要占用空间

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-12-11 09:39
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
以下是引用游乐园在2006-12-7 19:16:21的发言:
没错 define N 5
是宏定义 是预编译时做的工作 没有分配内存空间

而 C++和java种中的常量是分配在内存中静态数据区

c++: const int a=1;
java: final int a=1;

如果查看常量的地址取他们的引用值就可以了

C++只有在需要的时候才占用内存.否则是不占用的.而是简单的替换.
JAVA我不太清楚.


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-12-11 12:32
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
以下是引用song4在2006-12-11 9:39:58的发言:
除了在符号表里面的东西,剩下任何东西都要占用空间


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-12-11 12:33
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
看看书吧,在我所见的书中,有的书上将 define N 5 归于常量,而有的则否定这重方式表示常量,具体就看你的理解了

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-12-11 12:35
快速回复:常量的问题不太懂
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017550 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved