C 真正的变量

小魔菇 2010-06-12 03:40:51
我看C专家编程中说
const int i = 2;
i并不是真正的常量
因为不能在switch的case中被使用

我用#define i 2 就可以了

想请教的是 为什么const int i = 2定义的就不是常量了?
这里的2不是不能被改变吗?
而define就可以了

请高手指点之下 谢谢
...全文
293 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
testoftesttest 2010-06-18
  • 打赏
  • 举报
回复
const int i = 2; 支持寻址 &i
#define i 2 不支持寻址&i
sabflying 2010-06-18
  • 打赏
  • 举报
回复
不错,变量不能用于分配栈空间
viinku 2010-06-16
  • 打赏
  • 举报
回复
学习了,常量和立即数
  • 打赏
  • 举报
回复
所以这种情况c是不允许的:
const int N = 10;
char str[N]; //这样是不允许的!因为N是一个只读变量,只是变量!
#define N 10
char str[N]; //这样是对的!
  • 打赏
  • 举报
回复
只读变量,常量!
在c语言中加const表示的就是只读变量,记住它是一个变量!而在c++中它就是一个常量;
在c中define宏定义的就是一个常量!
快乐田伯光 2010-06-14
  • 打赏
  • 举报
回复
常量就是常量,立即数就是立即数, 这二者怎么可以等同呢?
常量是放在数据段的, 而立即数是在代码段里头的,两者根本就不是一回事.

[Quote=引用 18 楼 yjzl1911 的回复:]
引用 14 楼 cceczjxy 的回复:
引用 12 楼 yjzl1911 的回复:
引用 11 楼 cceczjxy 的回复:
引用 10 楼 guosha 的回复:
#define i 2怎么会是一个常量呀? 这不就是一个立即数嘛.


对,他只是一个宏,不能算常量

宏展开后是一个立即数,立即数不就是一个整型常量吗?


展开后是个立即数不假,但好像不能把立即数和整……
[/Quote]
小魔菇 2010-06-14
  • 打赏
  • 举报
回复
在C专家编程里面说的
通过#define 和 enum定义的才是常量
xinzaiyiqi 2010-06-14
  • 打赏
  • 举报
回复
学习了
yjzl1911 2010-06-14
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 guosha 的回复:]
常量就是常量,立即数就是立即数, 这二者怎么可以等同呢?
常量是放在数据段的, 而立即数是在代码段里头的,两者根本就不是一回事.


引用 18 楼 yjzl1911 的回复:
引用 14 楼 cceczjxy 的回复:
引用 12 楼 yjzl1911 的回复:
引用 11 楼 cceczjxy 的回复:
引用 10 楼 guosha 的回复:
#define i 2怎么会是一……
[/Quote]
翻了下资料 立即数和常量不是一个概念 :立即数应该是汇编里的术语;而常量是c语言里的术语
jo_say 2010-06-13
  • 打赏
  • 举报
回复
god
yjzl1911 2010-06-13
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 cceczjxy 的回复:]
引用 12 楼 yjzl1911 的回复:
引用 11 楼 cceczjxy 的回复:
引用 10 楼 guosha 的回复:
#define i 2怎么会是一个常量呀? 这不就是一个立即数嘛.


对,他只是一个宏,不能算常量

宏展开后是一个立即数,立即数不就是一个整型常量吗?


展开后是个立即数不假,但好像不能把立即数和整形常量等同
[/Quote]
恩 我可能说得不到位 我的意思是 在楼主所说的情况 i展开后的立即数5是一个整型常量。不过 立即数的定义是什么? 我的理解是 立即数其实就是常量 只是类型可能有多种 如 整型 浮点型 等等
louyong0571 2010-06-13
  • 打赏
  • 举报
回复
学习了
cffa_edfe 2010-06-13
  • 打赏
  • 举报
回复
C不是,C++可以
cceczjxy 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 yjzl1911 的回复:]
引用 11 楼 cceczjxy 的回复:
引用 10 楼 guosha 的回复:
#define i 2怎么会是一个常量呀? 这不就是一个立即数嘛.


对,他只是一个宏,不能算常量

宏展开后是一个立即数,立即数不就是一个整型常量吗?
[/Quote]

展开后是个立即数不假,但好像不能把立即数和整形常量等同
cceczjxy 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 cceczjxy 的回复:]
引用 10 楼 guosha 的回复:
#define i 2怎么会是一个常量呀? 这不就是一个立即数嘛.


对,他只是一个宏,不能算常量
[/Quote]
自己给自己的:
我错了
yjzl1911 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 cceczjxy 的回复:]
引用 10 楼 guosha 的回复:
#define i 2怎么会是一个常量呀? 这不就是一个立即数嘛.


对,他只是一个宏,不能算常量
[/Quote]
宏展开后是一个立即数,立即数不就是一个整型常量吗?
cceczjxy 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 guosha 的回复:]
#define i 2怎么会是一个常量呀? 这不就是一个立即数嘛.
[/Quote]

对,他只是一个宏,不能算常量
快乐田伯光 2010-06-12
  • 打赏
  • 举报
回复
#define i 2怎么会是一个常量呀? 这不就是一个立即数嘛.
太乙 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 eclipse_2 的回复:]
引用 3 楼 hqin6 的回复:

Assembly code
#include <iostream>
using namespace std;
int main()
{
const int i = 10;
int* p = const_cast<int*>(&amp;i);
cout << hex << p << endl;
cout << hex << &……
[/Quote]你需要去掉编译器的优化~~~即使用:*((int*)&i)
jiangfeng999 2010-06-12
  • 打赏
  • 举报
回复
学习了,ding
加载更多回复(7)

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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