标题:关于const一问
只看楼主
miaomiao0403
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-8-22
 问题点数:0 回复次数:19 
关于const一问
有如下程序
#include <iostream.h>
int main()
{
    const int a=1;
    cout<<"a="<<a<<endl;
    int *p=(int *)&a;
    *p=2;
    cout<<"a="<<a<<endl;
    cout<<"*p="<<*p<<endl;
    cout<<&a<<endl;
    cout<<&(*p)<<endl;
    return 1;
}
运行结果a保持1不变,*p为2;但a和*p地址相同,不知道是因为什么。(在vc6下)
搜索更多相关主题的帖子: const int main cout include 
2008-01-25 18:29
linsua
Rank: 1
等 级:新手上路
帖 子:275
专家分:0
注 册:2008-1-2
得分:0 
编译器认为const int变量是不被改变的,const int 型变量会像宏一样被替代掉。
cout<<"a="<<a<<endl;

相当于
cout<<"a="<<1<<endl;

所以我们不应该改变const变量的值,否则会为社会所不容。

如果你对我的话感到再明白不过 那恐怕你是误解了我的意思
2008-01-25 18:41
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
得分:0 
const 只对修饰的变量有用......你那个p和const 扯不上关系...
 你*p和a地址相同是毫无疑问的,,,你自己用int *p=(int*)&a让p指向a,.....当然p存放a的地址..
 还有C++里有这个:const_cast<目标类型>(源类型)

樱花大战,  有爱.
2008-01-25 18:49
eagleboycn
Rank: 1
等 级:新手上路
帖 子:191
专家分:0
注 册:2007-9-26
得分:0 
原帖由 [bold][underline]中学者[/underline][/bold] 于 2008-1-25 18:49 发表 [url=http://bbs.][/url]
const 只对修饰的变量有用......你那个p和const 扯不上关系...
 你*p和a地址相同是毫无疑问的,,,你自己用int *p=(int*)&a让p指向a,.....当然p存放a的地址..
 还有C++里有这个:const_cast(源类型) ...


请问一下:
a是存在&a地址,而p=&a,那么*p和a在同一个地址,p和&a地址仍然一致,而*p值变了
那么a的const int值又是怎么存在的?
能不能解答下?谢谢了.........

兵法的精要在于韬晦自己
2008-01-26 07:36
新男孩
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2007-8-15
得分:0 
我觉得,const 变量是不能被改变的!
2008-01-26 09:14
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
得分:0 
变量名字在汇编的时候就改成一个符号了
const 告诉这个符号不可改变,定义的时候就固定死了,没有空间分配了.
而值肯定是要占地址的,这段地址的实际值已经改成2了.
在显示的时候读取到const固定住为1.

你可以新建个指针查看.



#include <iostream>
using namespace std;
int main()
{
    const int a=1;
    cout<<"a="<<a<<endl;
    int *p=(int *)&a;
    *p=2;
    cout<<"a="<<a<<endl;
    cout<<"*p="<<*p<<endl;
    cout<<(int)&a<<endl;
    cout<<(int)&(*p)<<endl;
    int *f=(int*)2293620;
    cout<<*f<<"\n"<<a<<endl;
    cout<<(int)&(*f)<<endl;
    cin.get();
}

红色的值是不可移植的,你得根据你的情况而定
2008-01-26 10:41
winterdieyi
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-1-26
得分:0 
这个程序不能运行吧 ?
const 不能改
2008-01-26 11:25
你的嘴角
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-1-14
得分:0 
const不课变
2008-01-26 16:16
lf426
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-12-15
得分:0 
只有2楼说的靠点谱。
你可以认为C++遇到const int a=1;的时候就马上把程序里面所有的(int)a都换成给他赋的const值1了。你之后在&a地址上任意改变也不会影响之前已经执行过的操作了。
2008-01-26 20:36
eagleboycn
Rank: 1
等 级:新手上路
帖 子:191
专家分:0
注 册:2007-9-26
得分:0 
是不是可以怎么理解:
const变量与非const变量区别只存在编译阶段前
在编译时候const变量象#define的一样被值替代
而只有非const变量才存在于数据区?
重新申明一个非const变量发现其地址与const变量地址差距很大啊
另外:对&a又怎么理解?
希望高手们能给点更深入的解答
谢谢.......................

兵法的精要在于韬晦自己
2008-01-26 22:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-198738-1-1.html




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

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