Pointers in C | Programming and Data Structures - Computer Science Engineering (CSE) PDF Download

C - Pointer arithmetic

A pointer in c is an address, which is a numeric value. Therefore, you can perform arithmetic operations on a pointer just as you can on a numeric value. There are four arithmetic operators that can be used on pointers: ++, --, +, and -
To understand pointer arithmetic, let us consider that ptr is an integer pointer which points to the address 1000. Assuming 32-bit integers, let us perform the following arithmetic operation on the pointer −
ptr++
After the above operation, the ptr will point to the location 1004 because each time ptr is incremented, it will point to the next integer location which is 4 bytes next to the current location. This operation will move the pointer to the next memory location without impacting the actual value at the memory location. If ptr points to a character whose address is 1000, then the above operation will point to the location 1001 because the next character will be available at 1001.

Incrementing a Pointer

We prefer using a pointer in our program instead of an array because the variable pointer can be incremented, unlike the array name which cannot be incremented because it is a constant pointer. The following program increments the variable pointer to access each succeeding element of the array −
#include <stdio.h>
const int MAX = 3;
int main () {
   int  var[] = {10, 100, 200};
   int  i, *ptr;
   /* let us have array address in pointer */
   ptr = var;
   for ( i = 0; i < MAX; i++) {
      printf("Address of var[%d] = %x\n", i, ptr );
      printf("Value of var[%d] = %d\n", i, *ptr );
     /* move to the next location */
      ptr++;
   }    
   return 0;
}
When the above code is compiled and executed, it produces the following result −
Address of var[0] = bf882b30
Value of var[0] = 10
Address of var[1] = bf882b34
Value of var[1] = 100
Address of var[2] = bf882b38
Value of var[2] = 200

Decrementing a Pointer

The same considerations apply to decrementing a pointer, which decreases its value by the number of bytes of its data type as shown below −
#include <stdio.h>
const int MAX = 3;
int main () {
   int  var[] = {10, 100, 200};
   int  i, *ptr;
  /* let us have array address in pointer */
   ptr = &var[MAX-1];
   for ( i = MAX; i > 0; i--) {
      printf("Address of var[%d] = %x\n", i-1, ptr );
      printf("Value of var[%d] = %d\n", i-1, *ptr );
      /* move to the previous location */
      ptr--;
   }
   return 0;
}
When the above code is compiled and executed, it produces the following result −
Address of var[2] = bfedbcd8
Value of var[2] = 200
Address of var[1] = bfedbcd4
Value of var[1] = 100
Address of var[0] = bfedbcd0
Value of var[0] = 10

Pointer Comparisons

Pointers may be compared by using relational operators, such as ==, <, and >. If p1 and p2 point to variables that are related to each other, such as elements of the same array, then p1 and p2 can be meaningfully compared.
The following program modifies the previous example − one by incrementing the variable pointer so long as the address to which it points is either less than or equal to the address of the last element of the array, which is &var[MAX - 1] −
#include <stdio.h>
const int MAX = 3;
int main () {
  int  var[] = {10, 100, 200};
  int  i, *ptr;
   /* let us have address of the first element in pointer */
   ptr = var;
   i = 0;    
   while ( ptr <= &var[MAX - 1] ) {
      printf("Address of var[%d] = %x\n", i, ptr );
      printf("Value of var[%d] = %d\n", i, *ptr );
      /* point to the next location */
      ptr++;
      i++;
   }    
   return 0;
}
When the above code is compiled and executed, it produces the following result −
Address of var[0] = bfdbcb20
Value of var[0] = 10
Address of var[1] = bfdbcb24
Value of var[1] = 100
Address of var[2] = bfdbcb28
Value of var[2] = 200

The document Pointers in C | Programming and Data Structures - Computer Science Engineering (CSE) is a part of the Computer Science Engineering (CSE) Course Programming and Data Structures.
All you need of Computer Science Engineering (CSE) at this link: Computer Science Engineering (CSE)
119 docs|30 tests

Top Courses for Computer Science Engineering (CSE)

FAQs on Pointers in C - Programming and Data Structures - Computer Science Engineering (CSE)

1. What is pointer arithmetic in C?
Ans. Pointer arithmetic in C allows us to perform arithmetic operations on pointers. This means we can add or subtract integers to/from pointers, which results in the pointer pointing to a different memory location. For example, adding 1 to a pointer increments its value by the size of the data type it points to.
2. How is pointer arithmetic different from regular arithmetic in C?
Ans. Pointer arithmetic in C is different from regular arithmetic because it operates on memory addresses rather than on the actual values. Regular arithmetic operations like addition or subtraction work on the values themselves, whereas pointer arithmetic works on the addresses of those values.
3. What are the advantages of using pointer arithmetic in C?
Ans. Pointer arithmetic in C offers several advantages, such as: - It allows efficient traversal of arrays and data structures. - It enables us to access and manipulate data directly in memory, which can be useful in certain programming scenarios. - It provides a way to dynamically allocate and deallocate memory using functions like malloc() and free(). - It can be used to implement complex data structures and algorithms efficiently.
4. What are the potential pitfalls of using pointer arithmetic in C?
Ans. While pointer arithmetic can be powerful, it also introduces the risk of certain pitfalls, including: - Dereferencing a null or uninitialized pointer can lead to undefined behavior or crashes. - Performing invalid arithmetic operations on pointers can result in accessing invalid memory locations or causing buffer overflows. - Mixing pointers of different types can lead to type-related errors or memory corruption. - Incorrectly incrementing or decrementing a pointer can cause it to go out of bounds or point to unintended memory locations.
5. How can I ensure the safety and correctness of pointer arithmetic in C?
Ans. To ensure the safety and correctness of pointer arithmetic in C, it is important to follow these guidelines: - Always initialize pointers before using them and avoid dereferencing null pointers. - Be mindful of the types and sizes of pointers to ensure correct arithmetic operations. - Bound-checking and validation should be performed to prevent accessing invalid memory locations. - Use appropriate data structures and algorithms to minimize the potential for errors. - Debugging tools and techniques can be employed to identify and fix issues related to pointer arithmetic.
119 docs|30 tests
Download as PDF
Explore Courses for Computer Science Engineering (CSE) exam

Top Courses for Computer Science Engineering (CSE)

Signup for Free!
Signup to see your scores go up within 7 days! Learn & Practice with 1000+ FREE Notes, Videos & Tests.
10M+ students study on EduRev
Related Searches

Viva Questions

,

Exam

,

video lectures

,

ppt

,

practice quizzes

,

study material

,

mock tests for examination

,

Sample Paper

,

Previous Year Questions with Solutions

,

Semester Notes

,

Extra Questions

,

Objective type Questions

,

Pointers in C | Programming and Data Structures - Computer Science Engineering (CSE)

,

Pointers in C | Programming and Data Structures - Computer Science Engineering (CSE)

,

Pointers in C | Programming and Data Structures - Computer Science Engineering (CSE)

,

shortcuts and tricks

,

Summary

,

Important questions

,

MCQs

,

pdf

,

past year papers

,

Free

;