| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 715 人关注过本帖
标题:关于C++和C中const的问题
只看楼主 加入收藏
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:2 
关于C++和C中const的问题
#include <iostream>
using namespace std;
int main()
{
        const int i = 10;
        int * p =(int *) &i;
        *p = 20;
        cout<<"*p address:"<<p<<endl;
        cout<<"i address:"<<&i<<endl;
        cout<<"i :"<<i<<endl;
        cout<<"*p:"<<*p<<endl;
        return 0;
}
运行结果:
*p address:0xbff4b968
i address:0xbff4b968
i :10
*p:20
上述代码用G++编译
#include <stdio.h>
int main( void )
{
const int a = 10;
int *p = (int*)(&a);

*p = 100;

printf("a address: %#p", &a );
printf("*p address: %#p", p );
printf("a value: %d", a );
printf("*p value: %d", *p);
return 0;
}
用gcc编译
结果为:
a address: 0x0022ff74
*p address:0x0022ff74
a value: 100
*p value: 100
为什么会有这种结果呢??先大家谈论  我晚上在发答案~~~~

搜索更多相关主题的帖子: const 
2010-04-18 15:12
zhddragon
Rank: 5Rank: 5
等 级:职业侠客
帖 子:208
专家分:346
注 册:2009-5-14
收藏
得分:10 
c++里的const跟c的宏比较类似,通常情况下他是被放在符号表里而没有分配空间,在编译的时候直接进行替换,但如果对该变量进行与地址相关的操作时编译器会进行一次地址空间的分配。在上面的代码里,在编译时上面所有的i会被替换成10,而p指向编译器给分配的地址。
代码编译结果类似于:
#include <iostream>
using namespace std;
int main()
{
        int i ;
        int * p =(int *) &i;
        *p = 20;
        cout<<"*p address:"<<p<<endl;
        cout<<"i address:"<<&i<<endl;
        cout<<"i :"<<10<<endl;
        cout<<"*p:"<<*p<<endl;
        return 0;
}

而c中的const可以理解为不可修改的变量,在编译过程中他是一定会被分配一个内存空间的,该变量的值就存放在该内存空间中

身体是玩命的本钱
2010-04-19 23:45
wylzjcw
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:185
专家分:174
注 册:2009-1-4
收藏
得分:10 
严格来说,C语言没有const,只有宏定义。
C++引入const,它的使用比宏定义安全,另外可进行地址指针运算。
但在VC++类编译器中,对于const常量仍采用了宏定义,但常量也有地址为什么这样处理也不清楚原因。
int * p =(int *) &i 这条语句正常编译应通不过,应为 const int * p = &i;
或者 int * p = reinterpret_cast<int *>(&i);
但 reinterpret_cast只有一种用法是正确的,那就是在C++类中的常函数调用非常量成员时,其他情况皆为非法。




勾股定理用相似三角形证明最合理
2010-04-20 00:54
快速回复:关于C++和C中const的问题
数据加载中...
 
   



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

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