Difference between const. pointer and reference?

后端 未结 5 1014
滥情空心
滥情空心 2020-11-30 19:43

What is the difference between a constant pointer and a reference?

Constant pointer as the name implies can not be bound again. Same is the case with the reference.

相关标签:
5条回答
  • 2020-11-30 20:12

    When you should use each:

    reference: Use these by default. It is very common for people to dereference NULL pointers. You eliminate that risk with a reference.

    const pointer: When you want a reference, but can't make one. For example, you are writing a driver, and you'd like a pointer to the beginning of a memory map. A reference doesn't make as much sense in that case. Also, if you need an array of the things, a reference won't work (though an array of simple classes with reference members will).

    In the next example, a const pointer checks an error that a reference can't check:

    int addFour( int* register ){
      if(isNull(arg)){
        throw NullPointerException();
      }  
    
      // some stuff
      *register += 4;
    
      return register;
    }
    
    // This could be any function that does pointer math.
    bool isNull(const int* ptr){
      return( NULL == ptr );
    }
    
    0 讨论(0)
  • 2020-11-30 20:16

    I assume that you mean a const-valued pointer (e.g. int* const ptr), not a pointer to const (e.g. int const* ptr).

    • Not initializing a reference is a compile error (avoids the problem of uninitialized pointers)
    • A pointer may also point to an array, or it can be NULL, where a reference always refers to exactly one object.
    • The syntax is very different
    0 讨论(0)
  • 2020-11-30 20:21

    There are 3 types of const pointers:

    //Data that p points to cannot be changed from p
    const char* p = szBuffer;
    
    //p cannot point to something different.  
    char* const p = szBuffer;
    
    //Both of the above restrictions apply on p
    const char* const p = szBuffer;
    

    Method #2 above is most similar to a reference.

    There are key differences between references and all of the 3 types of const pointers above:

    • Const pointers can be NULL.

    • A reference does not have its own address whereas a pointer does.
      The address of a reference is the actual object's address.

    • A pointer has its own address and it holds as its value the address of the value it points to.

    • See my answer here for much more differences between references and pointers.

    0 讨论(0)
  • 2020-11-30 20:27

    Almost all points have been covered by other answers, except this important one : It is possible to do arithmetics on pointers, but not on reference. E.g.

    int a[3] = {39, 18, 97};
    int * const b = a;
    int c = *(b+1);  // sets c = 18
    
    0 讨论(0)
  • 2020-11-30 20:27

    Some differences:

    A const pointer can point to NULL.

    A const point can point to an array of objects.

    A const pointer can be bound again by casting away the constness.

    0 讨论(0)
提交回复
热议问题