| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1172 人关注过本帖, 1 人收藏
标题:同一地址,出现2个不同值。
只看楼主 加入收藏
独孤剑魔
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2008-8-5
收藏(1)
 问题点数:0 回复次数:12 
同一地址,出现2个不同值。
我在测试 const_cast,遇到一个问题,如下:
#include<iostream>
using namespace std;
void main()
{
    const int j = 10;
    const int *i = &j;
    cout<<"*i="<<*i<<endl;
    cout<<"i="<<i<<endl;
    int *p = const_cast<int*>(i);
    *p=*p+1;
    cout<<"j="<<j<<endl;
    cout<<"*i="<<*i<<endl;
    cout<<"*p="<<*p<<endl;
    cout<<"i="<<i<<endl;
    cout<<"p="<<p<<endl;
}

结果是:
*i=10
i=0012FF7C
j=10
*i=11
*p=11
i=0012FF7C
p=0012FF7C
Press any key to continue
因为j是const,无法改变,这个我知道,我使用了一个指向const对象的指针,于是声明了*i;为了测试 const_cast,我又声明了一个指针*p;我是这么认为的,*p指向的其实也可以说是j,在结果中,的确指向的是j,因为内存地址一样,可是,在输出此地址上的数值时,却产生了不一致,试问各位高手是怎么回事,小弟实在不知其祥!

[[it] 本帖最后由 独孤剑魔 于 2008-9-5 19:15 编辑 [/it]]
搜索更多相关主题的帖子: 地址 
2008-09-05 19:11
独孤剑魔
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2008-8-5
收藏
得分:0 
为什么没人回答啊???小弟十分迫切知道原因。
2008-09-05 20:15
xlh5225
Rank: 2
等 级:论坛游民
威 望:2
帖 子:188
专家分:25
注 册:2007-8-14
收藏
得分:0 
有不一至吗?明显是一样的...自己看清楚点.你用p将i的值加了1了!
至于为什么能对一个const i加1,你用了显示的强制转换const_cast,当然,通过p来改变i内存值是可以的!
2008-09-05 20:35
独孤剑魔
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2008-8-5
收藏
得分:0 
我的问题是,在同一个内存地址中,使用cout<<j<<endl与cout<<*i或*p<<endl 为什么取得的值不同!!!
2008-09-05 20:40
huihexiang
Rank: 1
等 级:新手上路
威 望:1
帖 子:11
专家分:0
注 册:2008-9-1
收藏
得分:0 
*p=*p+1;
2008-09-05 20:46
独孤剑魔
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2008-8-5
收藏
得分:0 
回复 5# huihexiang 的帖子
j是一个const的,我的确是改变了*i的值,但是在取得时候,无论是cout<<j,还是cout<<*i,按说都是0012FF7C上的值,为什么在0012FF7C会出现2个不同的值。你所说的*p=*p+1我当然知道,只是请各位解释下,在0012FF7C这块内存中,为什么会有10和11两个值!!!!!!
2008-09-05 21:05
huihexiang
Rank: 1
等 级:新手上路
威 望:1
帖 子:11
专家分:0
注 册:2008-9-1
收藏
得分:0 
经const修饰后的数据,编译器将其视为常量,不再分配内存
这个时候&j地址内的数据变化不改变j
2008-09-05 22:15
独孤剑魔
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2008-8-5
收藏
得分:0 
回复 7# huihexiang 的帖子
const int j = 10;
    const int *i = &j;
    cout<<"*i="<<*i<<endl;
    cout<<"i="<<i<<endl;
   //int *p = const_cast<int*>(i);
先不考虑注释掉的部分,你所说的const修饰后的j不在分配内存,我真的没明白,因为我声明了一个指向const对象的指针*i,i所取出的地址是谁的呢?
2008-09-06 09:29
独孤剑魔
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2008-8-5
收藏
得分:0 
没人回答么
2008-09-07 00:01
战鹰001
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-9-6
收藏
得分:0 
楼住你可以参考这个网址对const_cast作用的说明
http://baike.baidu.com/view/1745221.htm
2008-09-07 08:47
快速回复:同一地址,出现2个不同值。
数据加载中...
 
   



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

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