Pointer and const

Rajesh M. Kanojia's Avatar, Join Date: Dec 2012
Go4Expert Member
Dear members,
can any one tell me what exactly meaning of:-
  • Variable constant( const <data type> variable_name);
  • pointer to a constant
  • constant pointer
IndiraP's Avatar, Join Date: Nov 2012
Go4Expert Member
constant variable
say
const int a=10;
then u cant change a to any other value... ie.,
a=11; would be an error..

constant pointer

int i=10,j;
int *const a=&i;
then that pointer is a constant pointer to that memory location..so that pointer can't be used to point to other location...
a=&j; //would be an error

pointer to a constant

int i=10;
const int *p=&i;
then the value pointed to by the pointer cant be changed.
*p=11; would be an error..
shabbir like this
Rajesh M. Kanojia's Avatar, Join Date: Dec 2012
Go4Expert Member
dear IndiraP,
i agree with u what u are saying about constant variable, but i get confused when i access constant variable through a pointer, it not only allow me to access the value but through this i can also modify the value of constant variable.

main()
{
const int a=10;
a=11; // generates error
int *ptr;
ptr =&a;
*ptr =11;
printf("\n Now value of constant variable a is : %d",a);
getch();
return 0;
}

plz tell me how variable a become constant.
IndiraP's Avatar, Join Date: Nov 2012
Go4Expert Member
see...wat do u mean by constant variable first of all???

u r actually making a variable hold a constant value in it instead of allowing it to handle multiple varibale values..rite..???

now in the program u mentioned..u made "a" variable constant..means "a" can only hold 10...so it can't take any other value not even 11..!!!

n when u created a pointer for it...look carefully...u created a pointer to "a" which is constant n which holds only 10 ..rite???

it means.. a pointer to a constant...so wat happens..even the pointer can't change the value that it is pointing to...afterall "a"-->can only hold 10....n when u r manipulating *p..u r actually trying to change "a'"s value ..so will it allow.??? no ...rite??

n "a" is nothing but the name of the memory location where 10 resides...so p=&a..makes p point to the memory location of "a"...n *p is value at &a...where that memory is locked to hold only 10 by specifying it constant...so *p=11 is error..


n refer to pointer to constant..for any better understanding..

got it???

Last edited by IndiraP; 12Dec2012 at 22:24..
Rajesh M. Kanojia like this
Rajesh M. Kanojia's Avatar, Join Date: Dec 2012
Go4Expert Member
Dear Indira P
I got u and also agree with u but first copy the below program and run then see what i am asking:-
Code:
#include<stdio.h>
#include<conio.h>
int main()
{
 	const int a=10;
 	int *ptr;
 	ptr=&a;
 	printf("\n Now the value at memory : %u  is : %d  ",&a,a); 	
 	*ptr=11;
 	printf("\n Now the value at memory : %u  is : %d  ",&a,a);
 	getch();
 	return 0 ;
}

Last edited by shabbir; 13Dec2012 at 14:28.. Reason: Code blocks
IndiraP's Avatar, Join Date: Nov 2012
Go4Expert Member
yeah..i did run it..n u get error at p=&a; stating that "const int * can't be converted into int * "
rite???..
it's because...tha variable is constant...so the pointer that it points to becomes pointer to a constant..rite???

but *p is declared as normal integer...so in order to eliminate the error make *p a const int *p;

and coming to *p=11...u can't change the value anyway..!!!