Tuesday, March 25, 2008

All I wanted is to speak about Pointers

I always came across many dudes who find pointers, a little difficult part of C programming. So, Here's a short tutorial about pointers..

Salvation lies beneath:

The C language allows the programmer to ``peek and poke'' directly into memory locations. This gives great flexibility and power to the language, but it also one of the great hurdles that the beginner must overcome in using the language.

All variables in a program reside in memory; the statements

    float x;
x = 6.5;

request that the compiler reserve 4 bytes of memory (on a 32-bit computer) for the floating-point variable x, then put the ``value'' 6.5 in it. Sometimes we want to know where a variable resides in memory. The address (location in memory) of any variable is obtained by placing the operator ``&'' before its name. Therefore &ampx is the address of x. C allows us to go one stage further and define a variable, called a pointer, that contains the address of (i.e. ``points to'') other variables. For example:

    float x;
float* px;

x = 6.5;
px = &x;

defines px to be a pointer to objects of type float, and sets it equal to the address of x:
Pointer use for a variableThe content of the memory location referenced by a pointer is obtained using the ``*'' operator (this is called dereferencing the pointer). Thus, *px refers to the value of x.

C allows us to perform arithmetic operations using pointers, but beware that the ``unit'' in pointer arithmetic is the size (in bytes) of the object to which the pointer points. For example, if px is a pointer to a variable x of type float, then the expression px + 1 refers not to the next bit or byte in memory but to the location of the next float after x (4 bytes away on most workstations); if x were of type double, then px + 1 would refer to a location 8 bytes (the size of a double)away, and so on. Only if x is of type char will px + 1 actually refer to the next byte in memory.

Thus, in

    char* pc;
float* px;
float x;

x = 6.5;
px = &x;
pc = (char*) px;

(the (char*) in the last line is a ``cast'', which converts one data type to another), px and pc both point to the same location in memory--the address of x--but px + 1 and pc + 1 point to different memory locations.Looks easy huh? But As far I know, Security is a major concern for pointers..

Happy Hacking!!!