社区
Linux/Unix社区
帖子详情
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
打赏
收藏
C 真正的变量
我看C专家编程中说 const int i = 2; i并不是真正的常量 因为不能在switch的case中被使用 我用#define i 2 就可以了 想请教的是 为什么const int i = 2定义的就不是常量了? 这里的2不是不能被改变吗? 而define就可以了 请高手指点之下 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
27 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
testoftesttest
2010-06-18
打赏
举报
回复
const int i = 2; 支持寻址 &i
#define i 2 不支持寻址&i
sabflying
2010-06-18
打赏
举报
回复
不错,变量不能用于分配栈空间
viinku
2010-06-16
打赏
举报
回复
学习了,常量和立即数
xx说就叫这个名字
2010-06-16
打赏
举报
回复
所以这种情况c是不允许的:
const int N = 10;
char str[N]; //这样是不允许的!因为N是一个只读变量,只是变量!
#define N 10
char str[N]; //这样是对的!
xx说就叫这个名字
2010-06-16
打赏
举报
回复
只读变量,常量!
在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*>(&i);
cout << hex << p << endl;
cout << hex << &……
[/Quote]你需要去掉编译器的优化~~~即使用:*((int*)&i)
jiangfeng999
2010-06-12
打赏
举报
回复
学习了,ding
加载更多回复(7)
C语言中枚举与指针的实例详解
C语言中枚举与指针的实例详解 总结一下, 定义枚举,用... 关于类型指针的定义, 定义的时候在
变量
名左边加*代表此
变量
只是一个空指针而已, 若需要赋初始值,只能=0或者=NULL(NULL其实也是0),后面的语句必须要真正赋上新
C语言内存管理机制精讲-高手必修课视频教程
在企业级项目开发中一个非常重要的设计就是如何有效...在C语言中,关于内存管理的知识点比较多,如函数
变量
、作用域、指针、堆 、栈、 常量区、全局静态区、要想真正掌握和理解C语言,就必须先精通C语言内存管理机制。
C语言中
变量
的作用域
C语言中的
变量
,按照作用域的范围可分为两种, 即局部
变量
和全局
变量
。 首先确定概念: 不管局部
变量
,还是全局
变量
,定义只有一次,声明可以多次, 定义分配空间大小,声明不分配空间大小 ...
在c语言中 使用
变量
的要求,关于C语言中
变量
的探讨
与其他语言中的
变量
相比,C语言中的
变量
所包含的内容更为丰富,包括
变量
的定义、数据类型、
变量
数据类型的转换、作用域、存储类别和存储方式等。关键词: C语言
变量
变量
的存储类别C语言是一种应用广泛的、结构化的...
C语言全局
变量
与局部
变量
详解
这是因为c语言中一个程序的执行是有顺序的,c语言的入口函数是main函数,当调用func函数的时候,编译器此时还不知道有b这个
变量
,这个func函数想要打印b,可是这个
变量
b是定义在func函数的后面,还未声明就使用。...
Linux/Unix社区
23,125
社区成员
74,509
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章