Apply for Zend Framework Certification Training

c



< Pointer Arithmetic in C Dynamic memory allocation >



Advanced practice problems and solutions on Pointer Arithmetic in C

1. Pointer Traversal with Offset
Problem:
Print array elements using pointer arithmetic (no indexing).
int arr[] = {10, 20, 30, 40, 50};
Solution:
#include <stdio.h>
int main() {
    int arr[] = {10, 20, 30, 40, 50};
    int *ptr = arr;

    for(int i = 0; i < 5; i++) {
        printf("%d ", *(ptr + i));
    }
    return 0;
}
*(ptr + i) accesses elements without arr[i].

2. Reverse Array Using Pointer Arithmetic
Problem:
Print array in reverse using pointers.
Solution:
#include <stdio.h>
int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int *ptr = arr + 4;

    for(int i = 0; i < 5; i++) {
        printf("%d ", *(ptr - i));
    }
    return 0;
}
Start from last element and move backward.

3. Swap Two Numbers Using Pointers
Problem:
Swap values without using a third variable pointer.
Solution:
#include <stdio.h>
int main() {
    int a = 5, b = 10;
    int *p1 = &a, *p2 = &b;
    *p1 = *p1 + *p2;
    *p2 = *p1 - *p2;
    *p1 = *p1 - *p2;

    printf("a=%d b=%d", a, b);
    return 0;
}
4. Pointer Difference
Problem:
Find number of elements between two pointers.
Solution:
#include <stdio.h>
int main() {
    int arr[] = {10, 20, 30, 40, 50};
    int *p1 = &arr[1];
    int *p2 = &arr[4];

    printf("%ld", p2 - p1);
    return 0;
}
Output: 3 (difference in elements, not bytes)

5. Sum of Array Using Pointer Arithmetic
Problem:
Calculate sum using pointers only.
Solution:
#include <stdio.h>
int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int *ptr = arr;
    int sum = 0;

    for(int i = 0; i < 5; i++) {
        sum += *(ptr + i);
    }
    printf("Sum = %d", sum);
    return 0;
}
6. Double Pointer Arithmetic
Problem:
Access values using double pointer.
Solution:
#include <stdio.h>
int main() {
    int x = 10;
    int *p = &x;
    int **pp = &p;
    printf("%d", **pp);
    return 0;
}
**pp gives actual value.

7. Pointer Increment Trick
Problem:
Predict output.
int arr[] = {5, 10, 15};
int *p = arr;
printf("%d %d %d", *p, *p++, *++p);
Solution:
Output may vary (undefined behavior in C).
Reason: Multiple increments in same expression → compiler-dependent.

8. Traversing 2D Array with Pointer Arithmetic
Problem:
Print 2D array using pointers.
Solution:
#include <stdio.h>
int main() {
    int arr[2][3] = {{1,2,3},{4,5,6}};
    int *ptr = &arr[0][0];
    for(int i = 0; i < 6; i++) {
        printf("%d ", *(ptr + i));
    }
    return 0;
}
2D array stored in contiguous memory.

9. Pointer to Array vs Array of Pointers
Problem:
Access elements using pointer to array.
Solution:
#include <stdio.h>
int main() {
    int arr[3] = {10, 20, 30};
    int (*p)[3] = &arr;
    for(int i = 0; i < 3; i++) {
        printf("%d ", (*p)[i]);
    }
    return 0;
}
(*p)[i] is required syntax.

10. String Traversal Using Pointer
Problem:
Print string using pointer increment.
Solution:
#include <stdio.h>
int main() {
    char str[] = "HELLO";
    char *ptr = str;
    while(*ptr != '\0') {
        printf("%c ", *ptr);
        ptr++;
    }
    return 0;
}

< Pointer Arithmetic in C Dynamic memory allocation >



Ask a question



  • Question:
    {{questionlistdata.blog_question_description}}
    • Answer:
      {{answer.blog_answer_description  }}
    Replay to Question


Back to Top