社区
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就可以了
请高手指点之下 谢谢
...全文
378
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语言
变量
展开,介绍了
变量
的定义、命名规则、基本类型、初始化等内容。阐述了
变量
的作用域与存储类,包括局部和全局
变量
。还对比了C89与C99标准在
变量
定义位置上的差异,最后给出总结与学习建议,助于理解C语言
变量
。
c语言
变量
详解
本文深入探讨C语言中
变量
的各个方面。介绍了
变量
的定义、存储方式和命名规则,阐述了C语言中的多种数据类型,讲解了
变量
的声明、初始化及其好处,分析了
变量
的作用域,包括局部和全局作用域等,还补充了extern关键字用于跨文件使用全局
变量
。
c语言中
变量
的,c语言中
变量
的定义
本文深入解析C语言中的
变量
概念,包括
变量
的定义、作用域、生命周期等关键特性,并对比了局部
变量
与静态局部
变量
的区别。
c语言
变量
大全,C语言
变量
本文详细介绍了C语言中的
变量
,包括
变量
的基本概念、声明方法、不同类型
变量
的特点及使用场景。覆盖了局部
变量
、全局
变量
、静态
变量
、自动
变量
和外部
变量
等内容。
Linux/Unix社区
23,223
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章