zoukankan      html  css  js  c++  java
  • 指针总结以及常量指针与指向常量的指针与指向常量的常指针

    /*指针总结:
    1:指针未被初始化一个地址或刚删除一个指针都要将其初始化为0,否则的话将会导致该指针失控
    2:假如不想改变一个指针,那么将该指针定义为const,
    假如不想改变该指针指向的值,将指针指向的值定义为const
    假如即不想改变指针又不想改变指针指向的值,那么将指针和指针指向的值都定义为const
    
    在new堆中创建一个对象,然后将内存地址赋给指针,之后我们就可以通过内存地址访问堆中的对象,
    假如要删除该对象,我们只需要使用关键字delete,那么就会删除指针指向的对象并释放存储对象的内存空间,
    但是我们要注意一点,指针并没有被删除,并且它仍指向原来的内存空间,因此我们必须对它的值清零或重新赋值*/
    
    /*常量指针:自身不可以改变,但是它指向的目标却是可以改变的
    用法:int a, int *const p = a;常量指针必须在定义时初始化*/
    
    /*区分常量指针与指向常量的指针
    指向常量的指针:
    该指针指向的目标是不可以被修改的,但是该指针是可以被修改的
    指向常量的指针只是限制我们修改它的目标,但是它本身是可以被修改的
    const A *p2 = new A; //定义指向常量的指针*/
    
    
    /*指向常量的常指针,它本身不可修改,它指向的目标也是不可修改的
    定义方法:
    const A*const p1 = new A;这就定义了一个指向常量的常指针*/
    #include <iostream>
    using namespace std;
    class A
    {
    public:
        int get() const{return i;}
        void set(int x){i = x;}
    private:
        int i;
    };
    int main()
    {
        A *p = new A;
        p->set(10);
        cout <<"p:" << p << endl;
        p++;
        cout << "p:" << p << endl;
        A *const p1 = new A; //定义常量指针
        p1->set(11);
        cout <<"p1:" << p1 << endl;
        cout << p1->get() << endl;
        p1->set(11111);
        cout <<"p1:" << p1 << endl;
        cout << "p1:" << p1->get() << endl;
        const A *p2 = new A; //定义指向常量的指针
        p2++;
        const A *const p3 = new A;
        return 0;
    }
  • 相关阅读:
    将地址转换为链接的正则表达式(regex url href)
    [收藏]中国惠普前总裁孙振耀谈人生
    沪江技术团队寻觅新成员,下一位会是你吗?
    来点圣诞气氛
    让VisualSVN Server支持匿名访问
    11月25日博客园南京园友聚会
    [上海俱乐部活动]博文视点与博客园系列图书作者见面会暨.NET技术交流会
    比尔·盖茨在微软的最后一天
    真让人兴奋
    博客园新服务器已下订单
  • 原文地址:https://www.cnblogs.com/rain-1/p/4853103.html
Copyright © 2011-2022 走看看