C++ Primer 指针,引用笔记

引用:&

` int ival = 1024;

   int &refVal = ival;

  int &refVal2       // ! 引用必须初始化!而且无法解绑!!!

  int &refVal3  = refVal; // 正确! 这里其实是绑定到ival 上

  int i = refVal ;      // 正确!!这里i 被初始化为ival 的值

`

  但是!引用本身不是一个对象,所以不能定义引用的引用

但是 类型不匹配是不行的!

   int & refVal4 = 10;         // 不行!!!,因为引用必须绑定的是一个对象!!

   double dval = 3.14;

  int & refVa5l =dval;    // 不行!!类型不匹配!

  指针(pointer) 1 指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生活周期内它可以先后指向不同的对象。 2 指针无需在定义时赋初值,(一旦没有初始化,会将拥有一个不确定的值)


       `
        int *ip1 , *ip2;
        
        double dp, *dp2;

        int ival = 42;

        int *p = &ival;     // 指针存放某个地方的地址!获取地址试用&取地址符

// 因为引用不是对象,没有实际地址,所以不能定义指向引用的指针!!!

        ` 
        指针的值(即地址)应该是下列4种状态之一:

        1 指向一个对象
        2 指向紧邻对象所占空间的下一个位置
        3 空指针,意味着指针没有指向任何对象
        4 无效指针,也就是上述情况之外的其他值



        `利用指针访问对象:


              如果指针指向了一个对象,则允许使用解引用符(*) 来访问对象
                    
              int ival = 42;
        
              int *p =&ival;   


              count<< *p ;  // 输出42 , p存放着变量ival 的地址,或者说p是指向ival 的指针

              

              *p = 0;
              count<< *p ;   // 为*p 赋值,实际上是为p所指的对象赋值

`

C++ Primer 指针,引用笔记

  空指针(null pointer) :

  int *p1 = nullpter;  //等价于int *p1 = 0

  int *p2 = 0;                   // 初始化p2为字面常量

  int *p3 = Null ;  // 等价于int *p3 = 0

   int ival = 1024;

   int *pi = 0;

   int *pi2 = &ival;

  == : 比较的是两个指针的地址,如果为True 有三种情况 : 1 它们都为空 2 都指向同一个对象 3 都指向了同一个对象的下一地址。:

        (特殊情况, 一个指针指向了某对象,同时另外一个指针指向了另外对象的下一地址,此时也有可能出现两个指针相同的情况,即指针相等)


  Void* 指针

       是一种特殊的指针,可以用于存放任意对象的地址,一个*void 指针存放着一个地址,但是与其他不同的是,我们对这个地址到底是什么类型并不了解

        概括来说,我们以void 的视角来看内存空间也就仅仅是内存空间,没办法访问内存空间的对象

        我们更多的是拿它来跟别的指针来比较,所谓函数输入,输出,或者赋值给另外一个void* 指针
上一篇:C PRIMER PLUS 第13章 第7题 b小题


下一篇:C++ Primer Plus 第4章 习题8