C 真正的变量

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

我用#define i 2 就可以了

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

请高手指点之下 谢谢
...全文
122 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
brookmill 2010-06-12
  • 打赏
  • 举报
回复
const int i = 2;
这里的i本质上还是个变量,只不过是不允许修改的变量。
如果你再写一行 i=3,编译器会报错,原因是i不允许修改。

#define i 2
这里的i,经过预处理之后,在编译之前就被替换成2了,是个常数。
如果你再写一行 i=3,经过预处理之后就相当于2=3,编译器当然也会报错,但是原因和const那个就完全不一样了,根本就是语法错误。
如果你再写一行 case i: 经过预处理之后就相当于case 2: 所以编译器对他没有任何意见。

woso 2010-06-12
  • 打赏
  • 举报
回复
1楼正解
const只是告诉编译器,这个变量不能修改,编译器会对显示的修改发出警告。
但编译结果和普通的变量是一样的。
太乙 2010-06-12
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
int main()
{
const int i = 10;
int* p = const_cast<int*>(&i);
cout << hex << p << endl;
cout << hex << &i << endl;
*p = 100;
cout << *p << endl;
cout << *((int*)&i) << endl;
return 0;
}

23,116

社区成员

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

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