I already know how to program in Python and have built a few small games in C++. I'd like to learn C properly and am looking for advice on what to study and what kinds of projects or exercises are most useful for building a solid foundation.
4 Answers
Build a few small data structures from scratch, such as a linked list or basic hash table. Manual memory management and pointers are much easier to understand after you’ve dealt with an actual allocation bug or segmentation fault. You can also rewrite a small C++ project in plain C to see exactly which features the language normally handles for you.
The most effective approach is simply to write C regularly. Pick small problems or projects you actually care about and solve them in C instead of only reading tutorials. A beginner-friendly guide such as Beej’s Guide can give you structure while you practice.
Focus on pointers, memory, arrays, and structs. Those are some of the biggest differences when coming from Python or C++, and understanding how data is laid out and accessed will take you a long way in C.
Kernighan and Ritchie’s book is still a useful classic, especially if you work through the exercises instead of just reading it. It explains the reasoning behind the language as well as the syntax. That said, supplement it with modern C references, since the book doesn’t cover every newer practice or header, such as using stdint.h for fixed-width integer types.
Would you still recommend it as a main resource even though modern C has features and conventions that aren’t covered there?

Pointers finally clicked for me when I stopped treating them as weird syntax and started thinking of them as locations pointing to where the data lives. After that, the rest of C felt much less intimidating.