constant pointer, pointer to a constant and constant pointer to a constant const pointer, pointer to a constant and const pointer to a constant:


If a pointer declaration contains const type qualifier, then it would be either const pointer or pointer to constant or constant pointer to a constant.

const pointer:
What is constant pointer?
A constant pointer is a pointer whose value(address to which the pointer points to) cannot be changed after initialization.  But, we can change the value(pointee) to which the pointer points to.

How to declare constant pointer?
The qualifier const needs to be located in between the asterisk and pointer name.

     int      * const ptr;
    <type> * const <pointer-name>

Below is an example program for constant pointers.

  /* constant pointer */
  #include <stdio.h>
  int main() {
        int num1 = 10, num2 = 20;
        int * const ptr = &num1;
        printf("ptr: 0x%x\t *ptr: %d\n", (int)ptr, *ptr);
        /* trying to change the value of const pointer */
        ptr = &num2;
        printf("ptr: 0x%x\t *ptr: %d\n", (int)ptr, *ptr);
        return 0;
  }

  Output:
  jp@jp-VirtualBox:~/$ gcc -Wall constptr.c
  constptr.c: In function ‘main’:
  constptr.c:7: error: assignment of read-only variable ‘ptr’

We are trying to alter the value of the pointer after initialization.  That's the reason for the above error message.  Basically, we cannot change the value of the const pointer after initialization.


  /* constant pointer */
  #include <stdio.h>
  int main() {
        int num1 = 10;
        /* const pointer initialization */
        int * const ptr = &num1;
        printf("ptr: 0x%x\t *ptr: %d\n", (int)ptr, *ptr);
        /* changing the value at the address in pointer  */
        *ptr = 20;
        printf("ptr: 0x%x\t *ptr: %d\n", (int)ptr, *ptr);
        return 0;
  }


  Output:
  jp@jp-VirtualBox:~/$ gcc -Wall constptr.c
  jp@jp-VirtualBox:~/$ ./a.out
  ptr: 0xbfb0795c  *ptr: 10
  ptr: 0xbfb0795c  *ptr: 20

The above program explains that we can alter the value to which a const pointer points to(in the case of constant pointer).

Pointer to constant:
What is pointer to constant?
Pointer to a constant is nothing but the value to which a pointer refers to cannot be changed after initialization.

How to declare pointer to constant?
The qualifier const needs to be located before the type of the pointer variable.

      const   int      * ptr;
      const <type>  * <pointer-name>

Below is an example program for pointer to constant.

  #include <stdio.h>
  int main() {
        int num = 10;
        const int * ptr = &num;
        /* changing the value at the address in pointer */
        *ptr = 20;
        printf("ptr: 0x%x\t*ptr: %d\n", (int)ptr, *ptr);
        return 0;
  }

  Output:
  jp@jp-VirtualBox:~/$ gcc ptr2const.c
  ptr2const.c: In function ‘main’:
  ptr2const:6: error: assignment of read-only location ‘*ptr’

We are trying to alter the value(constant) to which the pointer points to.  That's the reason for the above error message.  Basically, the value to which the pointer points to cannot be altered in the case of pointer to a constant.

  #include <stdio.h>
  int main() {
        int num1 = 10, num2 = 20;
        const int * ptr = &num1;
        printf("ptr: 0x%x\t*ptr: %d\n", (int)ptr, *ptr);
        /* changing the pointer value */
        ptr = &num2;
        printf("ptr: 0x%x\t*ptr: %d\n", (int)ptr, *ptr);
        return 0;
  }

  Output:
  jp@jp-VirtualBox:~/$ gcc -Wall ptr2const.c
  jp@jp-VirtualBox:~/$ ./a.out
  ptr: 0xbfa1103c *ptr: 10
  ptr: 0xbfa11038 *ptr: 20

The above program explains that the pointer value can be altered in the case of pointer to a constant.

constant pointer to a constant:
What is constant pointer to a constant?
If the value of the pointer and pointee(the value to which pointer points to) cannot be altered after initialization, then it called constant pointer to a constant.

How to declare constant pointer to a constant?

Comments

Popular posts from this blog

Operators And Separators In C Language Operators in C Language:

Difference between asterisk and ampersand operators in c