回 帖 发 新 帖 刷新版面

主题:学用const 修饰符

1.指向const的指针
     Const int * u;等价于 int const * u;//可以不付初值

    const int*  ptr;    /*ptr是一个指针,它他指向一个const int */
    int const* ptr1;   /* ptr1是一个指向int 的 const的指针*/
    int object = 2;
    const ConstObject = 3;
    
    //ptr example
    ptr = &object;// *ptr= 2
    //    *ptr=*ptr+3;//*ptr is const. error:1-value specifies   const object
  
    object=object+2;
    *ptr;//*ptr = 4不能用ptr改变所指向对象的值,但对象值可以变
    //*ptr+=1;//ptr is const. error:1-value specifies const object
    ptr+=1;// 相当于指针下移,与object无关,这样用很危险

    
    ptr = &ConstObject;
    //*ptr =*ptr +3;//*ptr is const. error:1-value specifies const object
  //ConstObject=ConstObject+2;/*error C2166: l-value specifies const object*/
    ptr+=1;//相当于指针下移,与object无关,这样用很危险
    
//结论:指针不能间接访问

2. const指针
定义:int * const ptr;
读作:w是一个指针,这个指针指向int的const指针
用法:必须给一个初始值,可以改变他所指向的值

int d=1;
int *const ptr=&d;
*ptr;// *ptr=1;
d=5;
*ptr;//*ptr=5
//ptr+=1;/*error C2166: l-value specifies const object*/
*ptr =10;
d;//d=10

//结论:指针不能直接访问

3.    对象和指针都不能变
int  v=4;
const int* const  ptr = &v;
int const *const  ptr = &v;

//*ptr += 3;//Error
//ptr += 1;//Error


4.普通指针理解:
int d=1;
int* ptr;
int **ptr2;//指针的指针用于存储指针类型

ptr = &d;//ptr = 0x0012fb38
ptr2 = &ptr;//ptr2 = 0x0012fb34
*ptr;//1
*ptr2;//0x0012fb38
**ptr2;//1


d=6;//对象改变

ptr ;//ptr = 0x0012fb38
ptr2 ;//ptr2 = 0x0012fb34
*ptr;//6
*ptr2;//0x0012fb38
**ptr2;//6


*ptr += 1;//间接改变指向对象

ptr ;//ptr = 0x0012fb38
ptr2 ;//ptr2 = 0x0012fb34
*ptr;//7
*ptr2;//0x0012fb38
**ptr2;//7

ptr+=1;//指针改变

ptr ;//ptr = 0x0012fb3c
ptr2 ;//ptr2 = 0x0012fb34
*ptr;//随机,这样用很危险
*ptr2;//0x0012fb3c
**ptr2;//随机,这样用很危险

回复列表 (共7个回复)

沙发

大家帮我找一些关于一些C++方面。MFC方面的资料!再次多谢!!!!!!!!!

板凳

想要吗?我可以给你一些。

我的QQ:297442595


Email:programlover@163.com

看看你的信箱里

3 楼

楼主讲得很透啊!
收藏!

4 楼

实用 顶

5 楼

吗的

6 楼

不好意识,我有几个月没上啦,达分奇发的信息没看见

7 楼

不好意识,我有几个月没上啦,达分奇发的信息没看见

我来回复

您尚未登录,请登录后再回复。点此登录或注册