- Declaring Pointers
- Pointers to Functions
- Pointer to void
- Global and static pointers
- Memory Models
- Predefined Pointer-Related Types
- Understanding size_t
- Using the sizeof operator with pointers
- Using intptr_t and uintptr_t
- Pointer Arithmetic
- Multiple Levels of Indirection
- Constants and Pointers
- Memory Leaks
- Using the malloc Function
- Using the calloc Function
- Using the realloc Function
- Assigning NULL to a Freed Pointer
- Double Free
- The Heap and System Memory
- Freeing Memory upon Program Termination
- Dangling Pointer Examples
- Garbage Collection in C
- Resource Acquisition Is Initialization
- Using Exception Handlers
- Program Stack
- Organization of a Stack Frame
- Passing Data Using a Pointer
- Passing a Pointer to a Constant
- Pointers to Local Data
- Passing Null Pointers
- Passing a Pointer to a Pointer
- Declaring Function Pointers
- Using a Function Pointer
- Passing Function Pointers
- Returning Function Pointers
- Using an Array of Function Pointers
- Comparing Function Pointers
- Casting Function Pointers
- One-Dimensional Arrays
- Two-Dimensional Arrays
- Multidimensional Arrays
- Using Array Notation
- Using Pointer Notation
- Allocating Potentially Non-contiguous Memory
- String Declaration
- String Initialization
- Comparing Strings
- Copying Strings
- Concatenating Strings
- Passing a Simple String
- Passing a String to Be Initialized
- Passing Arguments to an Application
- Returning the Address of a Literal
- Returning the Address of Dynamically Allocated Memory
- Single-Linked List
- Improper Pointer Declaration
- Failure to Initialize a Pointer Before It Is Used
- Dealing with Uninitialized Pointers
- Test for NULL
- Misuse of the Dereference Operator
- Dangling Pointers
- Accessing Memory Outside the Bounds of an Array
- Calculating the Array Size Incorrectly
- Misusing the sizeof Operator
- Always Match Pointer Types
- Bounded Pointers
- String Security Issues
- Pointer Arithmetic and Structures
- Function Pointer Issues
- Double Free
- Accessing a Special Purpose Address
- Accessing a Port
- Accessing Memory using DMA
- Determining the Endianness of a Machine
- Using a Union to Represent a Value in Multiple Ways
- Strict Aliasing
- Using the restrict Keyword
- Sharing Pointers Between Threads
- Using Function Pointers to Support Callbacks
- Creating and Using an Opaque Pointer
- Polymorphism in C