The C Programming Language: Sometimes referred to as ‘K&R’, this was written in the 1970s by two people involved in the original development of C. There is no coverage of later revisions such as C99 and C11, and some of the examples are no longer considered good practice, but it’s still a clear and accessible starting point.

Practical C Programming: Usually I’m a fan of the O’Reilly animal books, but this one feels a bit outdated, rather like K&R except not as succinct.

C Programming: A Modern Approach: A hefty tome which goes into a lot of detail on most topics. The only downside is that it is intended as a university textbook, and so the author will only provide examples to around a third of the exercises. C99 is covered, but not C11.

C in a Nutshell: Superb reference and covers everything up to C11. Not intended as an introductory text.

21st Century C: Covers the ecosystem (e.g. applications for building C projects) and some advanced topics. The author has some strong opinions, not all of which I agree with.

Learn C the Hard Way: Another author with strong opinions, who thinks that the best way to learn C is to spend most of your time debugging deliberate errors. I’m not entirely convinced of this approach.