Learn C from first principles: types and control flow, functions, then the part that makes C different — arrays, pointers and manual memory.
C is a small language with a lot of consequences. There is no garbage collector, no bounds checking on arrays, and nothing stops you from writing to memory you do not own. That is exactly why it is worth learning: once you understand how memory actually works, the behaviour of almost every other systems language stops being mysterious. This course builds C from the ground up. You start with the type system and control flow, move into functions and how scope actually works, and then spend real time on pointers — the concept C is famous for, and the one that trips up nearly everyone exactly once. After pointers you will be comfortable with structs, dynamic allocation and the standard library. The emphasis throughout is on what the language *guarantees*. In C, the difference between correct and incorrect code is often whether the behaviour was defined at all, and learning to see that difference is the whole skill.