| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1490 人关注过本帖
标题:讨论一个程序(常量数组和普通常量const)
只看楼主 加入收藏
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
结帖率:100%
收藏
 问题点数:0 回复次数:17 
讨论一个程序(常量数组和普通常量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: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
你的blog背景音乐不错,叫啥名字啊

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-11-18 19:29
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 

谢欣雨的 天仙子


雁无留踪之意,水无取影之心
2007-11-18 20:13
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
输出13~

樱花大战,  有爱.
2007-11-18 21:30
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 

此贴作废

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


—>〉Sun〈<—
2007-11-18 21:36
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
我运行的就只有13.在vc6.0下

樱花大战,  有爱.
2007-11-18 21:41
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
此贴作废

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



—>〉Sun〈<—
2007-11-18 21:45
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
LS能说一下原因么,我还不理解怎么会出现这样的情况~

樱花大战,  有爱.
2007-11-18 21:49
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
-> 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: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
以下是引用cosdos在2007-11-18 21:45:44的发言:

我使用的是 DEV-C++

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

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



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


雁无留踪之意,水无取影之心
2007-11-18 22:07
快速回复:讨论一个程序(常量数组和普通常量const)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031085 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved