Arrays hold many items in order. Knowing their size and limits helps avoid errors when using them.
Array size and bounds in C++
const int ARRAY_SIZE = 5; int numbers[ARRAY_SIZE]; // Access elements from 0 to ARRAY_SIZE - 1 for (int index = 0; index < ARRAY_SIZE; ++index) { // Use numbers[index] }
Array indexes start at 0 and go up to size - 1.
Accessing outside these bounds causes undefined behavior (errors).
int emptyArray[0]; // Array with zero size (rarely used)
int singleElementArray[1] = {10}; // Valid index: 0 // Invalid index: 1 or more
int colors[3] = {1, 2, 3}; // Valid indexes: 0, 1, 2 // Accessing colors[3] is out of bounds and unsafe
This program creates an array of 4 scores, prints the size, and prints all scores safely by looping from 0 to size - 1.
#include <iostream> int main() { const int ARRAY_SIZE = 4; int scores[ARRAY_SIZE] = {85, 90, 78, 92}; std::cout << "Array size: " << ARRAY_SIZE << "\n"; std::cout << "Scores: "; for (int index = 0; index < ARRAY_SIZE; ++index) { std::cout << scores[index] << " "; } std::cout << "\n"; // Trying to access out of bounds (commented out to avoid error) // std::cout << scores[ARRAY_SIZE] << "\n"; // Unsafe! return 0; }
Time complexity to access an element by index is O(1).
Always check that index is between 0 and size - 1 before accessing.
Common mistake: Accessing index equal to or greater than size causes bugs or crashes.
Use loops with conditions based on array size to avoid out-of-bounds errors.
Arrays have a fixed size known at creation.
Valid indexes go from 0 up to size minus 1.
Accessing outside these bounds causes errors and must be avoided.
Practice
int arr[10]; in C++?Solution
Step 1: Understand array size declaration
The arrayarris declared with size 10, meaning it holds 10 elements.Step 2: Determine valid index range
In C++, array indexing starts at 0, so valid indexes are from 0 up to size-1, which is 9.Final Answer:
0 to 9 -> Option DQuick Check:
Array size 10 means indexes 0 to 9 [OK]
- Thinking indexes start at 1
- Including size as a valid index
- Confusing size with last index
Solution
Step 1: Review array declaration syntax
In C++, arrays are declared using square brackets with the size inside, likeint arr[5];.Step 2: Check each option
int arr(5); uses parentheses which is invalid for arrays. int arr = 5; assigns an int, not an array. int arr{5}; uses brace initialization but without specifying size properly.Final Answer:
int arr[5]; -> Option AQuick Check:
Array declaration uses square brackets [OK]
- Using parentheses instead of brackets
- Assigning a single int instead of array
- Confusing brace initialization with size
int arr[3] = {10, 20, 30};
std::cout << arr[3] << std::endl;Solution
Step 1: Identify array size and index used
The array has size 3, valid indexes are 0, 1, 2. The code accessesarr[3], which is out of bounds.Step 2: Understand consequences of out-of-bounds access
Accessing outside array bounds in C++ causes undefined behavior. It may print garbage, crash, or behave unpredictably.Final Answer:
Undefined behavior (may print garbage or crash) -> Option AQuick Check:
Out-of-bounds access causes undefined behavior [OK]
- Assuming arr[3] returns last element
- Expecting zero instead of garbage
- Thinking compiler catches out-of-bounds
int arr[4] = {1, 2, 3, 4};
for (int i = 0; i <= 4; i++) {
std::cout << arr[i] << " ";
}Solution
Step 1: Analyze loop bounds
The loop runs from i = 0 to i = 4 inclusive, so it tries to access arr[4].Step 2: Check array size and valid indexes
Array size is 4, valid indexes are 0 to 3. Accessing arr[4] is out of bounds and causes undefined behavior.Final Answer:
Loop condition should be i < 4, not i <= 4 -> Option CQuick Check:
Loop must use i < size to avoid out-of-bounds [OK]
- Using <= instead of < in loop condition
- Increasing array size unnecessarily
- Ignoring out-of-bounds access
Solution
Step 1: Understand function parameter requirements
To safely access array elements, the function must know the array size to avoid out-of-bounds access.Step 2: Evaluate each signature
int sumArray(int arr[], int size); passes both array and size, allowing safe iteration. int sumArray(int arr[10]); fixes size to 10, which is unsafe if actual size differs. int sumArray(int* arr); passes pointer without size, unsafe. int sumArray(int arr[]); passes array without size, unsafe.Final Answer:
int sumArray(int arr[], int size); -> Option BQuick Check:
Pass array and size to avoid out-of-bounds [OK]
- Assuming fixed size in function parameter
- Not passing size leads to unsafe access
- Using pointer without size information
Ready to prove it?
Pass the test and this pattern moves unknown
