1. Pointers allow functions to modify variables in the calling function by passing the address of variables. This allows functions to return multiple values. 2. Structures can be passed to functions using pointers to avoid expensive copying of large structures. Pointers to structures use -> to access members. 3. Pointers must match the type of the variable being pointed to. NULL is used to indicate an empty pointer. Dereferencing NULL causes crashes.