C++中的const

参考网址:
1.http://blog.csdn.net/miyunhong/archive/2010/09/24/5903857.aspx
2.http://developer.51cto.com/art/201001/180130.htm
3.http://developer.51cto.com/art/201002/182348.htm
4.http://tech.sina.com.cn/s/2004-09-17/0735426801.shtml
5.http://blog.chinaunix.net/u/30686/showart_524480.html

第一个例子:
#include <iostream>

using namespace std;
void main()
{    
    const int  qq=456;
    //int * const p表示声明一个指向非const对象的const指针
    int * const p=(int * const)&qq;    
    *p=123;
    cout<<qq<<endl;//输出456,没有变
    cout<<*p<<endl;//输出123

    int num=100;
    //这一句回报错:p=&num;
    int * const p2=&num;
    *p2=6;
    cout<<num<<endl;//输出6,值改变了
    cout<<*p2<<endl;//输出6
}


第二个例子:
#include "iostream"


using namespace std;
void main()
{    
    const int num=123;
    int *p=const_cast<int *>(&num);
    //还可以这样写:int *p=(int *)&num;
    *p=456;
    cout<<num<<endl;//输出123,值没有被改变
    cout<<*p<<endl;//输出456
}





第三个例子:
#include "iostream"
#include "My.h"

using namespace std;
void main()
{    
     extern const int a;
    int *p = (int *)&a;
    cout<<*p<<endl;//输出46
    *p=99;//执行到此处会报错“内存不能为written”
    
    
}
My.h如下:

extern const int a=46;

 

 

 

 

 

 第四个例子:

void Fun(const int arr[])
{    
    int *p=(int *)arr;
    *p=55;
}


void main()
{
    int arr[3]={3,6,9};
    Fun(arr);
    printf("%d\n",arr[0]);//输出55
    int num=1;
    int const *p=&num;
    int *p2=(int *)p;
    *p2=123;
    printf("%d\n",num);//输出123
}
 

 第五个例子:

  const int num=789;
    const int  *p;
    p=&num;
    int *p2=(int *)p;
    *p2=22;
    printf("%d\n",num);//输出789,推测是因为程序编译以后,这句代码成为printf("%d\n",789),这也证明对const常量进行&取地址操作就会将常量变为只读变量的说法是错误的
    printf("%d\n",*p);//输出22
    printf("%d\n",*p2);//输出22 

posted @ 2010-09-29 00:45  再快一点  阅读(255)  评论(0编辑  收藏  举报