Edwin illustrates dependent types through the example of list appending, emphasizing how it guarantees the output list's length based on input lengths. He also discusses how printf in C serves as a practical instance of dependent types, where the format string dictates the types of subsequent arguments, enhancing type safety in function calls.