Pointer is not at all a difficult concept. Pointer usage has created much difficulty for code maintenance and in debugging and hence the word spread “Pointers are difficult”. But for a programmer writing codes in the order of 100s of lines, pointers shouldn’t be difficult.
In C language a pointer is just a normal data type that can hold an address
There is just two operators a programmer should know about pointer usage
&var => returns the address of var *var => returns the content of value of var (it takes the value of var as address and returns the value of that address)
Just to ensure no confusion is there
var => returns the value of var
A pointer can hold any address (any int value can be considered an address), but the programmer should ensure that the address is within the memory range allocated to the process, or otherwise a segmentation fault can occur. Two normal ways of doing this is
- p = &var1; All program variables are assigned addresses within the program space. Hence, we can take the address of any program variable and assign it to a pointer
- p = malloc(…); malloc is a function used to create memory dynamically (memory is created in heap while normal variables are stored in stack). This dynamic memory also falls within the address space of the program and hence is safe to assign to a pointer variable