 | Use pointers in more complex ways |
 | Use disk files and perform file management functions |
 | Use string manipulation
math
time
and error-handling functions |
 | Get more from functions through the interaction of pointers and functions |
 | Allocate
reallocate and free memory at runtime |
 | Use type casts with variables and pointers |
 | Access arguments passed to the program on the command line |
 | Manipulate individual bits |
 | Apply the principles of modular programming |
 | Use preprocessor directives |