| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付赛孚耐:软件保护加密专家
身份认证令牌USB KEY   
共有 605 人关注过本帖
标题:讨论一个程序(常量数组和普通常量const)
收藏  订阅  推荐  打印 
PcrazyC
Rank: 12Rank: 12Rank: 12
等级:版主
威望:28
帖子:5631
积分:57645
注册:2006-10-20
讨论一个程序(常量数组和普通常量const)

测试程序:

#include <iostream>
using namespace std;
int main()
{
int const c1=4;
int const c2[1]={2};
*(int *)&c1=5;
*(int *)&c2[0]=9;
cout<<c1+c2[0]<<endl;
return 0;
}


结果如何?
搜索更多相关主题的帖子: 常量  const  
2007-11-18 19:00
永夜的极光
Rank: 12Rank: 12Rank: 12
等级:版主
威望:26
帖子:2710
积分:35264
注册:2007-10-9

你的blog背景音乐不错,叫啥名字啊

从BFS(Breadth First Study)到DFS(Depth First Study)
学习VIM中,欢迎访问我的blog  http://hi.baidu.com/newkedison
严重鄙视一切把论坛当成作业生成器和人肉搜索引擎的人
2007-11-18 19:29
PcrazyC
Rank: 12Rank: 12Rank: 12
等级:版主
威望:28
帖子:5631
积分:57645
注册:2006-10-20

谢欣雨的 天仙子


雁无留踪之意,水无取影之心
2007-11-18 20:13
中学者
Rank: 12Rank: 12Rank: 12
等级:版主
威望:14
帖子:3389
积分:34733
注册:2007-9-14

输出13~

汇编.....
2007-11-18 21:30
cosdos
Rank: 6Rank: 6
来自:ShangHai
等级:金牌会员
威望:1
帖子:1384
积分:14430
注册:2007-6-19

此贴作废

[此贴子已经被作者于2007-11-19 11:52:58编辑过]


—>〉Sun〈<—
2007-11-18 21:36
中学者
Rank: 12Rank: 12Rank: 12
等级:版主
威望:14
帖子:3389
积分:34733
注册:2007-9-14

我运行的就只有13.在vc6.0下

汇编.....
2007-11-18 21:41
cosdos
Rank: 6Rank: 6
来自:ShangHai
等级:金牌会员
威望:1
帖子:1384
积分:14430
注册:2007-6-19

此贴作废

[此贴子已经被作者于2007-11-19 11:52:36编辑过]



—>〉Sun〈<—
2007-11-18 21:45
中学者
Rank: 12Rank: 12Rank: 12
等级:版主
威望:14
帖子:3389
积分:34733
注册:2007-9-14

LS能说一下原因么,我还不理解怎么会出现这样的情况~

汇编.....
2007-11-18 21:49
cosdos
Rank: 6Rank: 6
来自:ShangHai
等级:金牌会员
威望:1
帖子:1384
积分:14430
注册:2007-6-19

-> const <-

int const c1=4; // 作为立即数存在
int const c2[1]={2}; // 存储在内存地址中,通过地址访问
*(int *)&c1=5; // 不能改变立即数的值,立即数是直接的数字
*(int *)&c2[0]=9; // 这行代码进行了强制赋值
cout<<c1+c2[0]<<endl; // cout<<4+c2[0]<<endl;

4 + 9 = 13 // C++ 中居然是这个结果
// C 因该是 14 或 6


//------------------------------------------------------------------------------

优化后“c2[1]={2};”也作为立即数,因为这个只有1个元素,把c[0]直接当成数字2,并且是使用const声明的,所以编译器认为它是不会被改变的。不过这是经过优化的。

-
-

[此贴子已经被作者于2007-11-18 22:08:37编辑过]


—>〉Sun〈<—
2007-11-18 22:05
PcrazyC
Rank: 12Rank: 12Rank: 12
等级:版主
威望:28
帖子:5631
积分:57645
注册:2006-10-20

以下是引用cosdos在2007-11-18 21:45:44的发言:

我使用的是 DEV-C++

不优化的情况下 13
开启进一步 优化的情况下为 6

开启优化的情况下作为立即数处理。只限于符合立即数要求的数。



这可不一样,你没发觉c1没有改变,而c2[0]改变了吗?


雁无留踪之意,水无取影之心
2007-11-18 22:07
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.094402 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved