社区
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就可以了
请高手指点之下 谢谢
...全文
320
27
打赏
收藏
C 真正的变量
我看C专家编程中说 const int i = 2; i并不是真正的常量 因为不能在switch的case中被使用 我用#define i 2 就可以了 想请教的是 为什么const int i = 2定义的就不是常量了? 这里的2不是不能被改变吗? 而define就可以了 请高手指点之下 谢谢
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
2023-03-31 项目笔记-第一阶段-4.
变量
、常量 4.1 定义
变量
的方法
2023-03-31 项目笔记-第一阶段-1.什么是C语言 2.第一个C语言程序 3.数据类型 3.1 数据类型的大小 3.2类型的使用 4.
变量
、常量 4.1 定义
变量
的方法
2023-03-31 项目笔记-第一阶段-4.
变量
、常量 4.2
变量
的命名
2023-03-31 项目笔记-第一阶段-1.什么是C语言 2.第一个C语言程序 3.数据类型 3.1 数据类型的大小 3.2类型的使用 4.
变量
、常量 4.1 定义
变量
的方法 4.2
变量
的命名
C语言新手入门之格式化输出和
变量
类型
主要给大家介绍了关于C语言中格式化输出和
变量
类型的相关资料,文中的教程非常适合新手零基础的朋友们参考学习,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
C语言实例解析精粹
C语言初学到精通必备资料
C语言内存管理机制精讲-高手必修课视频教程
在企业级项目开发中一个非常重要的设计就是如何有效地管理内存资源。在C语言中,关于内存管理的知识点比较多,如函数
变量
、作用域、指针、堆 、栈、 常量区、全局静态区、要想真正掌握和理解C语言,就必须先精通C语言内存管理机制。
Linux/Unix社区
23,217
社区成员
74,540
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章