Skip to main content

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?
The const qualifier needs to be located at two places as shown below.

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


Below is an example program for constant pointer to a constant.

  #include <stdio.h>
  int main() {
        int num1 = 10, num2 = 20;
        const int * const ptr = &num1;
        /* changing the pointee value */
        *ptr = 30;
        /* changing the pointer value */
        ptr = &num2;
        return 0;
  }



  Output:
  jp@jp-VirtualBox:~/cpgms/pointers$ gcc -Wall cptr2const.c 
  cptr2const.c: In function ‘main’:
  cptr2const.c:6: error: assignment of read-only location ‘*ptr’
  cptr2const.c:8: error: assignment of read-only variable ‘ptr’


We have tried to modify the value of pointer and pointee.  That's the reason for the above error message.  We cannot alter neither pointer nor pointee in the case of constant pointer to a constant.

Comments

Popular posts from this blog

restorecrtmode example in c

Header file:     graphics.h Synopsis:        void restorecrtmode();       Description:       restorecrtmode() restores screen mode to text mode. restorecrtmode function in c graphics   #include <graphics.h>   #include <stdlib.h>   #include <stdio.h>   #include <conio.h>   int main(void) {         /* request auto detection */         int gd = DETECT, gmode, err;         int midx, midy;         /* initialize graphics and local variables */         initgraph(&gd, &gmode, "C:/TURBOC3/BGI");         /* read result of initialization */         err = graphresult();         if (err != grOk) {                 /* an error occurred */               ...

How to install JDK and setting environment variables for java

In this tutorial, we are going to see the following. How to install JDK How to run java program without setting java path How to set temporary java path in windows How to set permanent java path in windows How to install JDK? Check whether JDK is installed on your PC.  If it is not installed, please go to the below link and download JDK under Java SE(Java Standard Edition) in oracle website . Install the downloaded JDK in your PC. Once JDK is installed, you can run your java program using any method shown below. Having your java source code under jdk/bin, compile the source code and run the program from same directory Setting temporary path for java, compiling the source code and running the program from any location using command prompt Updating the java path in system or user variable(in system properties), compiling the source code and running the program anywhere using command prompt Let us see how to run java program without setting environmental variables.  Once java is ...

Save image in Microsoft Paint without white background

Here, we are going to see how to save image in mspaint without white background 1. Create your own drawing or painting 2. Crop the needed portion of your drawing or painting or image. Here, I am going to crop the porting inside the red box. Now, we have cropped the portion that needs to be saved as an image. 5. Clear the screen and paste the image which we cropped earlier. 6. Decrease the screen size by 50% 7. Now, adjust your screen to fit to your image size. 8. Save the image to desired file format(jpeg, png, bmp etc) 9. Go to the saved location and open the file.  Below is the output image of mine Hope you liked this article!!  For any suggestions, please comment below.