| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 745 人关注过本帖
标题:const问题
取消只看楼主 加入收藏
kelas
Rank: 6Rank: 6
等 级:侠之大者
帖 子:176
专家分:434
注 册:2010-5-28
结帖率:94.12%
收藏
已结贴  问题点数:10 回复次数:3 
const问题
#include <stdio.h>

int main()
{

    const int a = 10;//a的值应该是不可改写的吧?
    int * b = &a;
    (*b)++;
    printf("%d\n",a);
}
为什么最后编译通过(产生一条警告信息),执行还是会改变a的值呢?
搜索更多相关主题的帖子: const 
2010-10-13 08:26
kelas
Rank: 6Rank: 6
等 级:侠之大者
帖 子:176
专家分:434
注 册:2010-5-28
收藏
得分:0 
以下是引用BlueGuy在2010-10-13 09:03:49的发言:

这个a是可以改的,

#include
int main(void)
{
   
    const int a = 10;//a的值应该是不可改写的吧?

    ((unsigned char *)&a)[0] = 11;

    printf("%d\n",a);
    getchar();

    return 0;
}
这样改就没警告了,
为什么a的值可改啊,const int a 定义的变量值不是不会被更改的吗?
2010-10-13 10:24
kelas
Rank: 6Rank: 6
等 级:侠之大者
帖 子:176
专家分:434
注 册:2010-5-28
收藏
得分:0 
以下是引用逐渐学习在2010-10-13 15:26:20的发言:

一、const 只是指明后面的变量初始化后不能被赋值。这只是编译时刻的限制。也就是说,
a基本上是一个普通的变量,只是compiler在检查你的代码有没有对它赋值。
二、
1) const int a;
2) int const a;
3) const int *a;
4) int * const a;
5) int const * const a;

1,2------的作用是一样,a是一个常整型数。
3--------意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。
4--------意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。
5--------最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。

这些都是查到的信息
初始化后不能被赋值,也就是说不能用a++ 、a= 类似的赋值,但通过地址改变其值是可以的?
2010-10-13 15:49
kelas
Rank: 6Rank: 6
等 级:侠之大者
帖 子:176
专家分:434
注 册:2010-5-28
收藏
得分:0 
回复 8楼 逐渐学习
我用vc++的是可以的,那就是可能是编译器的问题了。
2010-10-14 11:02
快速回复:const问题
数据加载中...
 
   



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

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