社区
C++ 语言
帖子详情
关于const的一个小问题
FlyingFox007
2003-10-21 10:35:35
看看下面的程序:
#include "stdafx.h"
#include "iostream.h"
int main(int argc, char* argv[])
{
const int num=10;
int* t;
t=(int*)#
*t=100;
cout<<*t<<endl;
cout<<num<<endl;
return 0;
}
输出结果为:
100
10
调试一下,设置一个断点,就可以清晰地看到,num的值改变了,为什么输出会不变呢。
...全文
47
9
打赏
收藏
关于const的一个小问题
看看下面的程序: #include "stdafx.h" #include "iostream.h" int main(int argc, char* argv[]) { const int num=10; int* t; t=(int*)# *t=100; cout<<*t<<endl; cout<<num<<endl; return 0; } 输出结果为: 100 10 调试一下,设置一个断点,就可以清晰地看到,num的值改变了,为什么输出会不变呢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
北极猩猩
2003-10-21
打赏
举报
回复
完了,白写了:(
hawkxjy
2003-10-21
打赏
举报
回复
不明白了,既然num是常量,为何还能够改变它的数值?
北极猩猩
2003-10-21
打赏
举报
回复
const int num=10;
0041203E mov dword ptr [num],0Ah
int* t;
t=(int*)#
00412045 lea eax,[num]
00412048 mov dword ptr [t],eax
*t=100;
0041204B mov eax,dword ptr [t]
0041204E mov dword ptr [eax],64h
cout<<num;
00412054 push 0Ah
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
00412056 mov ecx,offset cout (4318E4h)
0041205B call ostream::operator<< (41104Bh)
cout<<*t;
00412060 mov eax,dword ptr [t]
00412063 mov ecx,dword ptr [eax]
00412065 push ecx
00412066 mov ecx,offset cout (4318E4h)
0041206B call ostream::operator<< (41104Bh)
看到标注的那一条指令了吗?
在输出const int num时,它的值是在编译时已经被替换过了的。如果你不取num的地址改变量在运行时根本没有在内存中占据位置,所有对num的访问都被直接替换为常量的值10
daizh
2003-10-21
打赏
举报
回复
C++的编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。这样在出现num的地方它都会用10替代。
FlyingFox007
2003-10-21
打赏
举报
回复
原来和宏是一样的呀,收到。
rocllllll
2003-10-21
打赏
举报
回复
有道理,建议看一下:
林锐的一本书
小笨和漂向北方
2003-10-21
打赏
举报
回复
前面已经有人答过了,这是编译器的”功劳“:),它看到num被定义为常量后,就将程序中的num替换为10,也就是说cout<<num;变成了cout<<10,所以会出现上面的结果
FlyingFox007
2003-10-21
打赏
举报
回复
VC6。0 Enterprise Edition
tibetan
2003-10-21
打赏
举报
回复
我学习,有高手解释一下。我也觉得应该改变才对呀。你用的是什么编译器?
const与非const类型赋值
问题
const与非const之间,相互赋值时,如果使用不当,...关于这个
问题
,网上有说”非const变量赋给const变量,是非法的“。请不要陷入这种容易混乱的逻辑。 上述情况,比较正确的解释。const int 在初始化之后,是不能再改
const* 和 *const
const*和*const的区别也是老生常谈了,其实也很简单。 比如int const*a;...,我们都知道a的值其实是一个地址,这就表示a所保存的地址是不可以变的,但是这个地址对应的值是可以变的。 举个*const的例子: ...
关于const的用法
我们知道,const是一个关键词,它所修饰的常变量是C语言常量中的一种。 首先我们通过例子来了解const的用法。
关于const常量、const指针以及const引用
这篇博客从头到尾的讲一下关于const的一些
问题
。 1.const常量 与变量不同,有const修饰的量是常量,常量的值不可改变,在定义的时候必须初始化,使用未初始化的常量是错误的。以前还经常弄不清楚的
问题
就是常量和...
C语言 基础知识之const(const是什么,const的作用,const的使用)
编译器不为普通const常量分配存储空间,而是将他们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储和读取内存的操作。 三、const的使用 1、const和普通变量 (1)编译器在编译过程中把...
C++ 语言
64,687
社区成员
250,498
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章