1 of 28

TOPIC: POINTERS IN C

B.Sc(HONS) I Sem �Computer Science

(CC): Programming Fundamentals using C

PREPARED BY: Mr. Rabin Kumar Mullick

Department of Computer Science

Date : 27/11/2019

2 of 28

�C Pointers�C Pointers� C Pointers

  • Pointers are one of the core components of the C programming language. A pointer can be used to store the memory address of other variables, functions, or even other pointers. The use of pointers allows low-level memory access, dynamic memory allocation, and many other functionality in C.

3 of 28

What is a Pointer in C?�

  • A pointer is defined as a derived data type that can store the address of other C variables or a memory location. We can access and manipulate the data stored in that memory location using pointers.

4 of 28

Syntax�

The syntax of pointers is similar to the variable declaration in C, but we use the ( * ) dereferencing operator in the pointer declaration.

datatype * ptr;where

ptr is the name of the pointer.

datatype is the type of data it is pointing to.

The above syntax is used to define a pointer to a variable. We can also define pointers to functions, structures, etc.

5 of 28

How to Use Pointers?

The use of pointers can be divided into three steps:

1. Pointer Declaration

2. Pointer Initialization

3. Dereferencing

6 of 28

1. Pointer Declaration

In pointer declaration, we only declare the pointer but do not initialize it. To declare a pointer, we use the ( * ) dereference operator before its name.

Example

int *ptr;The pointer declared here will point to some random memory address as it is not initialized. Such pointers are called wild pointers.

7 of 28

2. Pointer Initialization

2. Pointer Initialization

Pointer initialization is the process where we assign some initial value to the pointer variable. We generally use the ( & ) addressof operator to get the memory address of a variable and then store it in the pointer variable.

Example

int var = 10; int * ptr; ptr = &var;We can also declare and initialize the pointer in a single step. This method is called pointer definition as the pointer is declared and initialized at the same time.

Example

int *ptr = &var;

8 of 28

3. Dereferencing�

Dereferencing a pointer is the process of accessing the value stored in the memory address specified in the pointer. We use the same ( * ) dereferencing operator that we used in the pointer declaration.

9 of 28

Types of Pointers

Pointers can be classified into many different types based on the parameter on which we are defining their types. If we consider the type of variable stored in the memory location pointed by the pointer, then the pointers can be classified into the following types:

1. Integer Pointers

2. Array Pointer

3. Structure Pointer

4. Function Pointers

5. Double Pointers

6. NULL Pointer

7. Void Pointer

8. Wild Pointers

9. Constant Pointers

10. Pointer to Constant

10 of 28

1. Integer Pointers�

As the name suggests, these are the pointers that point to the integer values.

Syntax

int *ptr;These pointers are pronounced as Pointer to Integer.

Similarly, a pointer can point to any primitive data type. It can point also point to derived data types such as arrays and user-defined data types such as structures.

11 of 28

2. Array Pointer

Pointers and Array are closely related to each other. Even the array name is the pointer to its first element. They are also known as  Pointer to Arrays. We can create a pointer to an array using the given syntax.

Syntax

char *ptr = &array_name;Pointer to Arrays exhibits some interesting properties which we discussed later in this article.

12 of 28

3. Structure Pointer

The pointer pointing to the structure type is called  Structure Pointer  or Pointer to Structure. It can be declared in the same way as we declare the other primitive data types.

Syntax

struct struct_name *ptr;In C, structure pointers are used in data structures such as linked lists, trees, etc.

13 of 28

4. Function Pointers

Function pointers point to the functions. They are different from the rest of the pointers in the sense that instead of pointing to the data, they point to the code. Let’s consider a function prototype – int func (int, char), the  function pointer  for this function will be

Syntax

int (*ptr)(int, int);

14 of 28

5. Double Pointers�

In C language, we can define a pointer that stores the memory address of another pointer. Such pointers are called double-pointers or  pointers-to-pointer. Instead of pointing to a data value, they point to another pointer.

Syntax

datatype ** pointer_name;�

15 of 28

6. NULL Pointer�

The  Null Pointers  are those pointers that do not point to any memory location. They can be created by assigning a NULL value to the pointer. A pointer of any type can be assigned the NULL value.

Syntax

data_type *pointer_name = NULL; or pointer_name = NULLIt is said to be good practice to assign NULL to the pointers currently not in use.

16 of 28

7. Void Pointer�

The  Void pointers  in C are the pointers of type void. It means that they do not have any associated data type. They are also called generic pointers as they can point to any type and can be typecasted to any type.

Syntax

void * pointer_name;

17 of 28

8. Wild Pointers�

The Wild Pointers are pointers that have not been initialized with something yet. These types of C-pointers can cause problems in our programs and can eventually cause them to crash.

Example

int *ptr; char *str;

18 of 28

9. Constant Pointers�

In constant pointers, the memory address stored inside the pointer is constant and cannot be modified once it is defined. It will always point to the same memory address.

Syntax

const data_type * pointer_name;

19 of 28

10. Pointer to Constant�

The pointers pointing to a constant value that cannot be modified are called pointers to a constant. Here we can only access the data pointed by the pointer, but cannot modify it. Although, we can change the address stored in the pointer to constant.

Syntax

data_type * const pointer_name;

20 of 28

Other Types of Pointers in C:�

There are also the following types of pointers available to use in C apart from those specified above:

  • Far pointer A far pointer is typically 32-bit that can access memory outside the current segment.
  • Dangling pointer A pointer pointing to a memory location that has been deleted (or freed) is called a dangling pointer.
  • Huge pointer A huge pointer is 32-bit long containing segment address and offset address.
  • Complex pointer: Pointers with multiple levels of indirection. Near pointer Near pointer is used to store 16-bit addresses means within the current segment on a 16-bit machine.
  • Normalized pointer: It is a 32-bit pointer, which has as much of its value in the segment register as possible.
  • File Pointer: The pointer to a FILE data type is called a stream pointer or a file pointer

21 of 28

Size of Pointers in C�

The size of the pointers in C is equal for every pointer type. The size of the pointer does not depend on the type it is pointing to. It only depends on the operating system and CPU architecture. The size of pointers in C is 

  • 8 bytes for a 64-bit System
  • 4 bytes for a 32-bit System

The reason for the same size is that the pointers store the memory addresses, no matter what type they are. As the space required to store the addresses of the different memory locations is the same, the memory required by one pointer type will be equal to the memory required by other pointer types

22 of 28

Pointer Arithmetic�

The Pointer Arithmetic  refers to the legal or valid arithmetic operations that can be performed on a pointer. It is slightly different from the ones that we generally use for mathematical calculations as only a limited set of operations can be performed on pointers. These operations include:

  • Increment in a Pointer
  • Decrement in a Pointer
  • Addition of integer to a pointer
  • Subtraction of integer to a pointer
  • Subtracting two pointers of the same type
  • Comparison of pointers of the same type.
  • Assignment of pointers of the same type.

23 of 28

C Pointers and Arrays�

In C programming language, pointers and arrays are closely related. An array name acts like a pointer constant. The value of this pointer constant is the address of the first element. For example, if we have an array named val then val and &val[0] can be used interchangeably.

If we assign this value to a non-constant pointer of the same type, then we can access the elements of the array using this pointer.

24 of 28

Uses of Pointers�

The C pointer is a very powerful tool that is widely used in C programming to perform various useful operations. It is used to achieve the following functionalities in C:

1.Pass Arguments by Reference

2.Accessing Array Elements

3.Return Multiple Values from Function

4.Dynamic Memory Allocation

5.Implementing Data Structures

6.In System-Level Programming where memory addresses are useful.

7.In locating the exact value at some memory location.

8.To avoid compiler confusion for the same variable name.

9.To use in Control Tables.

25 of 28

Advantages of Pointers�

Following are the major advantages of pointers in C:

  • Pointers are used for dynamic memory allocation and deallocation.
  • An Array or a structure can be accessed efficiently with pointers
  • Pointers are useful for accessing memory locations.
  • Pointers are used to form complex data structures such as linked lists, graphs, trees, etc.
  • Pointers reduce the length of the program and its execution time as well.

26 of 28

Disadvantages of Pointers�

Pointers are vulnerable to errors and have following disadvantages:

  • Memory corruption can occur if an incorrect value is provided to pointers.
  • Pointers are a little bit complex to understand.
  • Pointers are majorly responsible for  memory leaks in C.
  • Pointers are comparatively slower than variables in C.
  • Uninitialized pointers might cause a segmentation fault.

27 of 28

Conclusion�

In conclusion, pointers in C are very capable tools and provide C language with its distinguishing features, such as low-level memory access, referencing, etc. But as powerful as they are, they should be used with responsibility as they are one of the most vulnerable parts of the language.

28 of 28

  • THANK YOU