Jun 122012
 C++ Tags:  Add comments

What is the difference between the below two definition of pointers a and b:

    int x = 5;
    int* const a = &x;


    int x = 5;
    const int * b = &x;


In the first statement

       int * const a = &x;

a is a const pointer to integer. It means that a itself is a constant pointer and cannot be changed, but the value pointed to by it can be changed.

       *a = 10; // OK
       a = &y;  // ERROR

In the Second definition

        const int * b = &x;

b is pointing to a constant integer, but b itself is not a constant. So you may change b but not the value pointed to by b.

        *b = 10; // ERROR
        b = &y;  // OK

The best way is to read such definitions is to read them in the backward direction (from the variable being defined). So const int * b means that b is a pointer to int which is const. and int * const a means that a is a constant pointer to int.

By the way, the below definition

        const int * const c = &x;

means that c is a constant pointer and is pointing to a constant integer. Hence neither c and value-at c can be changes

Note that, x may not be a constant but if a constant pointer is storing its address then the pointer will treat as if it is pointing to a constant integer memory. Its value can be changed by directly assigning value to x but it cannot be changed via pointer.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>