Storage class defines the scope and lifetime of a variable. The main storage classes are automatic, register, static, and external. Automatic variables are allocated on the stack and have block scope, while register variables are stored in CPU registers for faster access but cannot have their address taken. Static variables retain their value between function calls and have either file or block scope. External variables are declared outside of functions and visible throughout the entire program.