Saturday 2 August 2014



For any beginner in C programming, the most intriguing and confusing part will be pointers (you can ask any novice C programmer).  The following will be a simple attempt to explain pointers for a beginner.

A pointer in its simplest of terms is a variable which points to the address of other variable.

Let us consider integer variable 'a' and initialize it as follows:

int a=1;

Variable a will be stored in a memory location and as we all know every memory location has an address. Let us assume "a" is stored at address 20.


int a=1; (address of a is 20)

Now we are introducing one more variable ptr, which is declared as:

int *ptr;

Let us see each word separately of the above declaration.

Int represents integer.

*ptr represents a pointer variable, which points to another variable of integer type (bit confusing isnt it? it should be, let us come to this a bit later), we are using * to indicate that what is following * is a pointer variable (to make the compiler understand).

We can store the address of another variable in pointer variable,  i.e., the content of the pointer variable can be the address of another variable.

Let us assume address of variable "ptr" as 30;

And now, let us consider

 ptr = &a;

the above statement indicate the compiler to assign the address of variable 'a' to the variable 'ptr' (just like how we are assigning 1 to variable 'a').

The '&' operator is known as "address of" operator (remember scanf?).

Now let's do some printing.

1. printf("%d",a); 1
2. printf("%d",&a); 20
3. printf("%d,ptr); 20
4. pritnf("%d,&ptr); 30
5. printf("%d",*ptr); 1

Understandably, we do not have any problems with first 2 printf statements.  Problem starts from the third...

The third statement prints the value 20, which is the address of variable 'a' (remember?), this is because we are assigning the address of variable 'a' to 'ptr' (ptr=&a).

Fourth statement is an usual statement which prints the address of the variable 'ptr.'

Fifth one is the most confusing, but important of all, where the printed value is 1, which is actually the value of variable 'a'.  This is happening because of * operator preceds 'ptr' variable.  * is called as derefencing operator.

What is happening here actually?!  When we are using deferencing operator *, the content of variable 'ptr' is considered (by the compiler obviously) as address of another variable and the corresponding value in that address will be printed.

So as per our example, the address of the variable 'a' is stored in variable 'ptr' (remember ptr=&a?), and when the printf statement gets executed, the value stored in address 20 (which is 1) is printed.

we just tried to give a toast of pointers in this introductory part and will explore more of pointers in detail in the coming days...happy programming.



Post a Comment

Search Here...