Bird
Raised Fist0
C++programming~20 mins

Pointers and arrays in C++ - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Pointer and Array Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of pointer arithmetic with arrays
What is the output of this C++ code snippet?
C++
#include <iostream>
int main() {
    int arr[] = {10, 20, 30, 40};
    int *p = arr;
    std::cout << *(p + 2) << std::endl;
    return 0;
}
A20
B40
C10
D30
Attempts:
2 left
💡 Hint
Remember that pointer arithmetic moves by the size of the data type.
❓ Predict Output
intermediate
2:00remaining
Value of pointer after increment
What will be the value printed by this program?
C++
#include <iostream>
int main() {
    int arr[3] = {5, 10, 15};
    int *ptr = arr + 1;
    std::cout << *ptr << std::endl;
    ptr++;
    std::cout << *ptr << std::endl;
    return 0;
}
A10\n15
B5\n10
C15\n10
D10\n10
Attempts:
2 left
💡 Hint
Pointer starts at second element, then moves to third.
🔧 Debug
advanced
2:00remaining
Identify the error in pointer usage
What error will this code produce when compiled or run?
C++
#include <iostream>
int main() {
    int *p;
    *p = 10;
    std::cout << *p << std::endl;
    return 0;
}
ACompilation error: uninitialized pointer
BRuntime error: segmentation fault
CCompilation error: missing semicolon
DOutputs 10
Attempts:
2 left
💡 Hint
Think about what happens when you dereference a pointer that has not been assigned a valid address.
🧠 Conceptual
advanced
2:00remaining
Size of array vs pointer
Given the code below, what will be the output?
C++
#include <iostream>
int main() {
    int arr[5] = {1,2,3,4,5};
    int *p = arr;
    std::cout << sizeof(arr) << " " << sizeof(p) << std::endl;
    return 0;
}
A20 8
B20 20
C5 8
D5 5
Attempts:
2 left
💡 Hint
sizeof(arr) gives total bytes of all elements, sizeof(p) gives size of pointer variable.
📝 Syntax
expert
2:00remaining
Correct pointer declaration and initialization
Which option correctly declares and initializes a pointer to the first element of an integer array named 'data'?
Aint ptr = &data[0];
Bint ptr* = data;
Cint *ptr = &data[0];
Dint *ptr = data[0];
Attempts:
2 left
💡 Hint
Pointer must be declared with * and initialized with address of an element.

Practice

(1/5)
1. What does the name of an array represent in C++?
easy
A. A copy of the entire array
B. The total size of the array
C. The last element of the array
D. A pointer to the first element of the array

Solution

  1. Step 1: Understand array name behavior

    In C++, the name of an array acts as a pointer to its first element, not the whole array or size.
  2. Step 2: Confirm pointer usage

    This pointer can be used to access elements by pointer arithmetic or indexing.
  3. Final Answer:

    A pointer to the first element of the array -> Option D
  4. Quick Check:

    Array name = pointer to first element [OK]
Hint: Remember array name points to element zero [OK]
Common Mistakes:
  • Thinking array name stores size
  • Confusing array name with last element
  • Assuming array name copies data
2. Which of the following is the correct way to declare a pointer to an integer array named arr?
easy
A. int *ptr = &arr;
B. int ptr = &arr;
C. int *ptr = arr;
D. int ptr = arr;

Solution

  1. Step 1: Understand pointer declaration

    To declare a pointer to an integer, use int *ptr. The array name arr acts as a pointer to its first element.
  2. Step 2: Assign pointer correctly

    Assigning ptr = arr; sets the pointer to the first element's address. Using &arr gives the address of the whole array, which has a different type.
  3. Final Answer:

    int *ptr = arr; -> Option C
  4. Quick Check:

    Pointer to first element = int *ptr = arr [OK]
Hint: Use int *ptr = arr; to point to array start [OK]
Common Mistakes:
  • Using &arr instead of arr for pointer
  • Declaring pointer as int instead of int*
  • Assigning pointer without *
3. What is the output of the following code?
int arr[] = {10, 20, 30};
int *p = arr;
std::cout << *(p + 1) << std::endl;
medium
A. 20
B. 10
C. 30
D. Compilation error

Solution

  1. Step 1: Understand pointer arithmetic

    Pointer p points to arr[0]. Adding 1 moves pointer to arr[1].
  2. Step 2: Dereference pointer at new position

    Dereferencing *(p + 1) gives the value at arr[1], which is 20.
  3. Final Answer:

    20 -> Option A
  4. Quick Check:

    *(p + 1) = arr[1] = 20 [OK]
Hint: Pointer + 1 points to next array element [OK]
Common Mistakes:
  • Confusing pointer arithmetic with addition of values
  • Dereferencing pointer without offset
  • Expecting compilation error
4. Identify the error in the following code snippet:
int arr[3] = {1, 2, 3};
int *p = &arr;
std::cout << *(p + 2) << std::endl;
medium
A. Pointer declaration is correct, no error
B. Incorrect pointer assignment: &arr should be arr
C. Dereferencing pointer is invalid syntax
D. Array size is too small for pointer arithmetic

Solution

  1. Step 1: Analyze pointer assignment

    arr is an array name acting as pointer to first element. &arr is address of whole array, type int (*)[3], incompatible with int *.
  2. Step 2: Correct pointer assignment

    Assigning int *p = arr; is correct to point to first element. Using &arr causes type mismatch and incorrect pointer arithmetic.
  3. Final Answer:

    Incorrect pointer assignment: &arr should be arr -> Option B
  4. Quick Check:

    Use arr, not &arr, for int* pointer [OK]
Hint: Use arr, not &arr, when assigning int* pointer [OK]
Common Mistakes:
  • Using &arr instead of arr for int*
  • Ignoring pointer type mismatch warnings
  • Assuming &arr points to first element
5. Given the code below, what will be the output?
int arr[] = {5, 10, 15, 20};
int *p = arr + 1;
std::cout << p[2] << std::endl;
hard
A. 20
B. 15
C. Undefined behavior
D. 10

Solution

  1. Step 1: Understand pointer initialization

    p = arr + 1; points to arr[1], which is 10.
  2. Step 2: Access element using pointer indexing

    p[2] means *(p + 2), which points to arr[3] (1 + 2 = 3), value 20.
  3. Final Answer:

    20 -> Option A
  4. Quick Check:

    p[2] = arr[3] = 20 [OK]
Hint: Pointer[index] = *(pointer + index) [OK]
Common Mistakes:
  • Confusing p[2] with arr[2]
  • Forgetting pointer offset starts at arr + 1
  • Assuming p[2] is out of bounds
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard