Syntax:
- constant pointer
- <type of pointer> * const <name of pointer> ( int * const ptr;)
- once address assigned then that's it. address is constatnt. but that address can have any value
- thinking like used to store particular hardware register using this kind of pointer and never changed that pointer address/restrict to change that pointer address throughout the program
- pointer to constant
- const <type of pointer>* <name of pointer> (const int* ptr;)
- once address assigned then address's value is constant but can change address
- thinking like used in the receving function parameter and not allowing the function to change the value (void func(const int* ptr))
- constant pointer to constant
- const <type of pointer>* const <name of pointer>(const int* const ptr;)
- both the assigned address cannot be changed and address's value also cannot be changed
- combination of above both
-------------------------------------------------------------------------------------------------------------------------------
Purpose of const qualifer :
Purpose of const qualifer :
- ows the compiler to catch errors in which code accidentally changes the value of a variable
- he compiler might be able to make certain optimizations to the code generated if it knows that a variable will not be changed.
- example 1:
while (*str = 0) /*instead of *str != 0 mentioned as *str = 0 by progmer*/ { /* some code here */ str++; }
- constant pointer
- <type of pointer> * const <name of pointer> ( int * const ptr;)
- once address assigned then that's it. address value is constatnt
Example 1a:
root@selvakumar-Lenovo-B460e:/C_pgms/const_pointer# cat constant_pointer.c
#include<stdio.h>
int main()
{
int a=10;
int b=20;
int * const ptr=&a;
ptr=&b;
return 0;
}
root@selvakumar-Lenovo-B460e:/C_pgms/const_pointer# gcc constant_pointer.c
constant_pointer.c: In function ‘main’:
constant_pointer.c:8:2: error: assignment of read-only variable ‘ptr’
root@selvakumar-Lenovo-B460e:/C_pgms/const_pointer#
Example 1b:
root@selvakumar-Lenovo-B460e:/C_pgms/const_pointer# cat constant_pointer.c
#include<stdio.h>
/* */
int main()
{
int a=10;
int b=20;
int * const ptr=&a;
printf("\nvalue before changing value of a = %d\n",*ptr);
*ptr = 20;
printf("\nvalue after changing of value of a = %d\n",*ptr);
//ptr=&b;
return 0;
}
root@selvakumar-Lenovo-B460e:/C_pgms/const_pointer# gcc constant_pointer.c
root@selvakumar-Lenovo-B460e:/C_pgms/const_pointer# ./a.out
value before changing value of a = 10
value after changing of value of a = 20
root@selvakumar-Lenovo-B460e:/C_pgms/const_pointer#
-------------------------------------------------------------------------------------------------------------------------------
- pointer to constant
- const <type of pointer>* <name of pointer> (const int* ptr;)
- once address assigned then address's value is constant but can change address
Example 2a:
root@selvakumar-Lenovo-B460e:/C_pgms/const_pointer# cat pointer_to_constant.c
#include<stdio.h>
int main()
{
int a=10;
int b=20;
const int *ptr=&a;
*ptr = 20;
return 0;
}
root@selvakumar-Lenovo-B460e:/C_pgms/const_pointer# gcc pointer_to_constant.c
pointer_to_constant.c: In function ‘main’:
pointer_to_constant.c:8:2: error: assignment of read-only location ‘*ptr’
root@selvakumar-Lenovo-B460e:/C_pgms/const_pointer#
Example 2b:
root@selvakumar-Lenovo-B460e:/C_pgms/const_pointer# cat pointer_to_constant_2.c
#include<stdio.h>
/* */
int main()
{
int a=10;
int b=20;
const int *ptr=&a;
ptr = &b;
printf("\n%d\n",*ptr);
return 0;
}
root@selvakumar-Lenovo-B460e:/C_pgms/const_pointer# gcc pointer_to_constant_2.c
root@selvakumar-Lenovo-B460e:/C_pgms/const_pointer# ./a.out
20
root@selvakumar-Lenovo-B460e:/C_pgms/const_pointer#
---------------------------------------------------------------------------------------------------------------------------------
- constant pointer to constant
- const <type of pointer>* const <name of pointer>(const int* const ptr;)
- both the assigned address cannot be changed and address's value also cannot be changed
root@selvakumar-Lenovo-B460e:/C_pgms/const_pointer# cat constant_pointer_to_constant.c
#include<stdio.h>
int main()
{
int a=10;
int b=20;
const int * const ptr=&a;
*ptr = 30;
ptr = &b;
printf("\n%d\n",*ptr);
return 0;
}
root@selvakumar-Lenovo-B460e:/C_pgms/const_pointer# gcc constant_pointer_to_constant.c
constant_pointer_to_constant.c: In function ‘main’:
constant_pointer_to_constant.c:7:2: error: assignment of read-only location ‘*ptr’
constant_pointer_to_constant.c:8:2: error: assignment of read-only variable ‘ptr’
root@selvakumar-Lenovo-B460e:/C_pgms/const_pointer#
Reference:
http://www.thegeekstuff.com/2012/06/c-constant-pointers/
https://stackoverflow.com/questions/1143262/what-is-the-difference-between-const-int-const-int-const-and-int-const
https://stackoverflow.com/questions/1143262/what-is-the-difference-between-const-int-const-int-const-and-int-const
No comments:
Post a Comment