Pointers and arrays let you work directly with memory locations. This helps you handle data efficiently and understand how computers store information.
Pointers and arrays in C
/* Define an array and a pointer to its first element */ int numbers[5] = {10, 20, 30, 40, 50}; int *pointer_to_numbers = numbers; /* Access elements using pointer arithmetic */ int first = *pointer_to_numbers; // 10 int second = *(pointer_to_numbers + 1); // 20
An array name like numbers acts like a pointer to its first element.
You can move the pointer to access other elements by adding an index.
int values[3] = {5, 10, 15}; int *ptr = values; // Access first element int first_value = *ptr; // 5 // Access second element int second_value = *(ptr + 1); // 10
int *ptr = NULL; // Accessing elements here is unsafe because array is empty.
int single_element[1] = {42}; int *ptr = single_element; int value = *ptr; // 42 // Moving pointer beyond this is unsafe.
int data[4] = {1, 2, 3, 4}; int *ptr = data + 3; // points to last element int last_value = *ptr; // 4
This program shows how to access and modify array elements using pointers. It prints the array elements first using normal array indexing, then using pointer arithmetic. Finally, it changes the third element through the pointer and prints the updated array.
#include <stdio.h> int main() { int numbers[5] = {10, 20, 30, 40, 50}; int *pointer_to_numbers = numbers; // points to first element printf("Array elements using array syntax:\n"); for (int i = 0; i < 5; i++) { printf("numbers[%d] = %d\n", i, numbers[i]); } printf("\nArray elements using pointer arithmetic:\n"); for (int i = 0; i < 5; i++) { printf("*(pointer_to_numbers + %d) = %d\n", i, *(pointer_to_numbers + i)); } // Change third element using pointer *(pointer_to_numbers + 2) = 100; printf("\nAfter changing third element via pointer:\n"); for (int i = 0; i < 5; i++) { printf("numbers[%d] = %d\n", i, numbers[i]); } return 0; }
Time complexity to access any element by pointer or array index is O(1).
Space complexity is the same for arrays and pointers; pointers just hold an address.
Common mistake: moving pointer beyond array bounds causes undefined behavior.
Use pointers when you want efficient access or to pass arrays to functions without copying.
Pointers can point to the first element of an array.
You can access array elements by moving the pointer with arithmetic.
Be careful not to go outside the array limits with pointers.
Practice
Solution
Step 1: Understand pointer basics
A pointer stores a memory address, not values or counts.Step 2: Pointer to array points to first element
In C, a pointer to an array points to the first element's address.Final Answer:
The address of the first element of the array -> Option AQuick Check:
Pointer = first element address [OK]
- Thinking pointer stores array size
- Confusing pointer with array value
- Assuming pointer stores last element
Solution
Step 1: Recall pointer declaration syntax
In C, a pointer to int is declared as int *ptr;Step 2: Check other options for syntax errors
int ptr[] declares an array, not a pointer; int &ptr is invalid in C; int ptr* is incorrect syntax.Final Answer:
int *ptr; -> Option BQuick Check:
Pointer syntax uses * before variable [OK]
- Using array syntax instead of pointer
- Confusing C++ reference (&) with pointer
- Placing * after variable name incorrectly
int arr[] = {10, 20, 30};
int *p = arr;
printf("%d", *(p + 1));Solution
Step 1: Understand pointer arithmetic
p points to arr[0], so p + 1 points to arr[1].Step 2: Dereference pointer at p + 1
*(p + 1) gives value at arr[1], which is 20.Final Answer:
20 -> Option DQuick Check:
*(p+1) = arr[1] = 20 [OK]
- Confusing *(p+1) with *p
- Assuming pointer arithmetic adds 1 byte
- Expecting arr[0] value instead
int arr[3] = {1, 2, 3};
int *p = arr + 3;
printf("%d", *p);Solution
Step 1: Analyze pointer assignment
arr + 3 points one element past the last array element (out of bounds).Step 2: Dereferencing out-of-bounds pointer
*p accesses invalid memory, causing undefined behavior.Final Answer:
Pointer points outside array bounds causing undefined behavior -> Option CQuick Check:
Pointer out of array range = error [OK]
- Ignoring pointer out-of-bounds access
- Thinking array size is wrong
- Confusing pointer syntax errors
int arr[] = {5, 10, 15, 20};
int *p = arr;
for(int i = 0; i < 4; i++) {
printf("%d ", *(p + i));
}Solution
Step 1: Understand the loop and pointer arithmetic
Loop runs i from 0 to 3, *(p + i) accesses arr[i].Step 2: Print each element in order
Values printed are arr[0]=5, arr[1]=10, arr[2]=15, arr[3]=20.Final Answer:
5 10 15 20 -> Option AQuick Check:
Pointer + i accesses arr[i] in order [OK]
- Assuming reverse order print
- Printing same element repeatedly
- Expecting syntax error
Ready to prove it?
Pass the test and this pattern moves unknown
