What Are Pointers ?
A pointer is
a variable whose value is the address of another variable, i.e., direct address
of the memory location. Like any variable or constant, you must declare a
pointer before using it to store any variable address. The general form of a
pointer variable declaration is –
What is a pointer in programming?
·
In computer science,
a pointer is a programming language object, whose value refers
to (or "points to") another value stored elsewhere in the
computer memory using its memory address. A pointer references a location in memory, and obtaining
the value stored at that location is known as dereferencing the
pointer.
·
A pointer is a
variable which contains the address in memory of another variable. We can have
a pointer to any variable type.
·
The unary or monadic operator & gives
the "address of a variable''.
·
The indirection or
dereference operator * gives the "contents of an object pointed
to by a pointer''.
The general form of a
pointer variable declaration is –
Here, the type is
the pointer's base type; it must be a valid C data type, and var-name is
the name of the pointer variable. The asterisk * used to declare a pointer is
the same asterisk used for multiplication. However, in this statement, the
asterisk is being used to designate a variable as a pointer. Take a look at
some of the valid pointer declarations –
In Brief:
Pointer is a user defined
data type which creates special types of variables which can hold the address
of primitive data type like char, int, float, double or
user defined data type like function, pointer, etc. or derived data type like
an array, structure, union, enum.
Examples:
int *ptr;
int (*ptr)();
int (*ptr)[2];
Types of
Pointers
·
NULL
Pointer
·
Dangling
Pointer
·
Generic
Pointers
·
Wild
Pointer
·
Complex
Pointers
·
Near
Pointer
·
Far
Pointer
·
Huge
Pointers
1. Null
Pointer
·
NULL Pointer is a pointer which is pointing to nothing.
·
NULL pointer points the base address of the segment.
·
In case, if you don’t have address to be assigned to pointer
then you can simply use NULL
·
Pointer which is initialized with NULL value is considered as a
NULL pointer.
·
NULL is macro constant defined in following header files –
stdio.h
alloc.h
mem.h
stddef.h
stdlib.h
Defining NULL Value
Visual Representation
Below
are some of the variable representations of a NULL pointer.
Example of NULL Pointer
Output :
2. Dangling Pointer
·
Dangling pointers arise when an object is deleted or
de-allocated, without modifying the value of the pointer, so that the pointer
still points to the memory location of the de-allocated memory.
·
In short, pointer pointing to a non-existing memory location is
called dangling pointer.
Examples of Dangling Pointer
There
are different ways where Pointer acts as a dangling pointer.
Way 1 : Using free or de-allocating memory
We have
declared the character pointer in the first step. After execution of some
statements, we have the de-allocated memory which is allocated previously for
the pointer.
As soon
as memory is de-allocated for pointer, pointer becomes dangling
pointer
Way 2 : Out of Scope
·
Character Pointer is Declared in the first Step.
·
Pointer Variable ‘ptr’ is pointing to Character Variable
‘ch’ declared in
the inner block .
·
As character variable is non-visible in Outer Block, then
Pointer is Still Pointing to Same Invalid memory location in Outer block, then
Pointer becomes “Dangling”.
3. Generic Pointers
When a
variable is declared as being a pointer to type void, it is
known as a generic pointer. Since you cannot have a variable of
type void, the pointer will not point to any data and therefore
cannot be dereferenced. It is still a pointer though, to use it you just have
to cast it to another kind of pointer first. Hence the term Generic pointer.
This is
very useful when you want a pointer to point to data of different types at
different times.
Example of Generic
Pointer
Here is
some code using a void pointer:
4. Wild Pointer
A
Pointer in C that has not been initialized till its first use is known as
the Wild pointer. A wild pointer points to some random memory
location.
Example of Wild Pointer
How can we avoid
Wild Pointers ?
We can
initialize a pointer at the point of declaration wither by the address of some
object/variable or by NULL;
5. Complex Pointers
Precedence : Operator
precedence describes the order in which C reads expressions
Associativity : Order
operators of equal precedence in an expression are applied
We need
to assign the priority to the pointer declaration considering precedence and
associative according to the following table.
Where
(): This
operator behaves as bracket operator or function operator.
[]: This
operator behaves as array subscription operator.
*: This
operator behaves as pointer operator, not as the multiplication operator.
Identifier:
It is not an operator, but it is name of the pointer variable. You will always
find the
Priority
will be assigned to the name of the pointer.
Data
type: It is also not an operator. Data types also include modifier (like signed
int,
long
double etc.)
6. Near Pointer
·
The pointer which can points only 64KB data segment or segment
number 8 is known as near
pointer.
·
That is near pointer cannot access beyond the data segment like
graphics video memory, text video memory, etc. Size of near pointer is two
byte. With the help of keyword near, we can make any pointer as near pointer.
Example of Near Pointer
Output: 2
7. Far Pointer
·
The pointer which can point or access whole the residence memory
of RAM, i.e., which can access all 16 segments is known as far pointer.
·
Size of the far pointer is 4 byte or 32 bit.
Example of Far Pointer
Output :
4
8. Huge Pointer
·
The pointer which can point or access whole the residence memory
of RAM i.e. which can access all 16 segments is known as a huge pointer.
·
Size of the far pointer is 4 byte or 32 bit.
Example of Huge Pointer
Output : 4 4 1
Explanation:
p is the huge pointer, *p is the far pointer and **p is char type data
variable.
Advantages of Pointers In C Programming
·
·
We can dynamically allocate or deallocate space in memory at a run
time by using pointers.
·
Using pointers, we
can return multiple values from a function.
·
We can pass arrays to a function as call by Reference.
·
Pointers are
used to efficiently access array elements, as array elements are stored in
adjacent memory locations. If we have a pointer pointing to a particular element
of an array, then we can get the address of next element by simply incrementing
the pointer.
·
Pointers in C are
used to efficiently implement dynamic Data Structures like Queues, Stacks,
Linked Lists, Trees, etc.
·
The use of pointers results in the faster execution of the
program.
0 Comments