注册 登录
编程论坛 C++教室

关于const的一点问题,希望有人站出来解答

l521126430 发布于 2008-02-15 23:19, 766 次点击
#include<stdio.h>
int main()
{
    const int a=3;
    int *p=(int*)&a;  
    *p=100;               
    printf("%d",a);     //输出为3,难道p与&a不是同一地址吗?
    return 0;
}
如注释,为什么a输出依然为三?
int main()
{
    int a=2;int b=4;
    int* const p=&b;
 printf("%d",*p);   //输出为 4
    int **p1=(int**)&p;
    *p1=&a;
    printf("%d",*p);    //输出为 2
    return 0;
}
而这个输出就为正确的?TELL  ME  WHY?  谢谢了,可以的话再讲下用处!
8 回复
#2
first_love2008-02-16 01:05
(1)
const int a=3;定义了变量a上存储的值为3,不能改变;
int *p=(int*)&a; 表示指针p存储了a的地址;
*p=100; 将p上存储的内容改为100;
[结果] 输出a当然不变啦。
(2)
int* const p=&b;定义了一个指向常量指针p,p指向的地址是不可以改变的;所以printf("%d",*p); 结果输出为 4;
int **p1=(int**)&p;定义二级指针p1指向p所存储的地址,即p1存储的是b的地址;
*p1=&a;表示将p1存储的b的地址所指向的值改为地址a上的值,即修改了变量b存储的值。printf("%d",*p); 所以输出的结果为 2
-----------------------------------------------------
个人的理解,不知道这样解释是否正确?
#3
sunkaidong2008-02-16 09:18
楼上的很完美了,帮你顶一下啊,又复习了一遍啊,呵呵
#4
sunkaidong2008-02-16 09:31
不过你用vc++调试你会看到很奇怪得东西....
#5
l5211264302008-02-16 16:54
谢谢。
#6
l5211264302008-02-16 16:54
谢谢。
#7
a198705022008-02-17 21:28
我也学到东西了。
#8
eagleboycn2008-02-18 07:28
[bo]以下是引用 [un]first_love[/un] 在 2008-2-16 01:05 的发言:[/bo]

(1)
const int a=3;定义了变量a上存储的值为3,不能改变;
int *p=(int*)&a; 表示指针p存储了a的地址;
*p=100; 将p上存储的内容改为100;
[结果] 输出a当然不变啦。
(2)
int* const p=&b;定义了一个指向常量指针p,p指向的地址是不 ...


请教一下:
第二部分:
我用dev c++和VC都试过,结果改变的只有p和*p1,a,b地址,值并没有改变啊
但是p声明是常量指针,为什么可以改变其指向的地址?

[[it] 本帖最后由 eagleboycn 于 2008-2-18 07:31 编辑 [/it]]
#9
天使梦魔2008-02-19 09:44
老早就已经讨论过一次了
1