C++ Pointers
Overview
Pointers are variables that store memory addresses. C++ provides enhanced pointer features compared to C, including smart pointers and better type safety.
Basic Pointer Operations
cpp
#include <iostream>
int main() {
int value = 42;
int* ptr = &value; // pointer to value
std::cout << "Value: " << value << std::endl;
std::cout << "Address of value: " << &value << std::endl;
std::cout << "Pointer value: " << ptr << std::endl;
std::cout << "Value pointed to: " << *ptr << std::endl;
*ptr = 100; // modify value through pointer
std::cout << "New value: " << value << std::endl;
return 0;
}Pointers and Arrays
cpp
#include <iostream>
int main() {
int arr[] = {10, 20, 30, 40, 50};
int* ptr = arr; // array name decays to pointer
// Access array elements using pointer arithmetic
for (int i = 0; i < 5; i++) {
std::cout << "arr[" << i << "] = " << *(ptr + i) << std::endl;
std::cout << "arr[" << i << "] = " << ptr[i] << std::endl; // equivalent
}
return 0;
}Dynamic Memory Allocation
cpp
#include <iostream>
int main() {
// Allocate memory for an integer
int* dynamic_int = new int(42);
std::cout << "Dynamic int: " << *dynamic_int << std::endl;
delete dynamic_int;
// Allocate memory for an array
int* dynamic_array = new int[5];
for (int i = 0; i < 5; i++) {
dynamic_array[i] = i * 10;
}
for (int i = 0; i < 5; i++) {
std::cout << dynamic_array[i] << " ";
}
std::cout << std::endl;
delete[] dynamic_array; // delete array
return 0;
}Smart Pointers (C++11 and later)
cpp
#include <iostream>
#include <memory>
int main() {
// unique_ptr - exclusive ownership
std::unique_ptr<int> unique_ptr_int = std::make_unique<int>(42);
std::cout << "Unique pointer value: " << *unique_ptr_int << std::endl;
// shared_ptr - shared ownership
std::shared_ptr<int> shared_ptr_int = std::make_shared<int>(100);
std::shared_ptr<int> another_shared = shared_ptr_int;
std::cout << "Shared pointer value: " << *shared_ptr_int << std::endl;
std::cout << "Reference count: " << shared_ptr_int.use_count() << std::endl;
return 0;
}