I've read a few "language agnostic" books and a few "language-specific" books over the past 2 years. There is generally a wide schism between these two types of books. Let me summarize them here:
Language Agnostic (examples: SICP, Introduction to Algorithms, Introduction to Computer Science):
These books focus on building programming fundamentals. Yes, SICP and Intro to CS use Scheme and Python respectively, but they focus on offering you the foundations to write useful and delightful programs. These aren't "cook books:" they teach you how to think through and understand problems and how to solve them with computers. Most notably, there tends to be many exercises at the end of the chapters that enhance your understanding of the material. These books tend to be long and dense, but well worth the effort.
Language-Specific Books (examples: Clojure Programming, Definitive Guide to Drupal):
I've learned to loathe these kinds of books. While they give you an overview of the features, they really never go through how to combine and mix the parts to make you more comfortable with the language or framework. The thing I hate the most is the incessant language-bashing and chatting up how incredible the languages are. I'm not saying they aren't worth the money, as they usually are, but they tend to only be a starting point, leaving many questions unanswered, and all the talk about "Doing it the hard way or the Drupal Way" and "Clojure raising your game.. and oh yeah, Python, Ruby, and Java sucks" takes away valuable real-estate to get you on your way to confidently use the language when you are done reading it and ultimately distracts me from the learning material. If I wanted to be indoctrinated, I wouldn't spend $30 for a book; I'd read a blog for free.
So, what is C Programming: A Modern Approach?
It's a beautiful mix of both of the above approaches. The book, as its name implies, tells you how to program in the wonderful C language. Yes, it mentions other languages in passing in the thankfully brief introduction, but there is no bashing. The author chose to teach you how to program in C from the bottom up and let you to decide what to do about it.
This book offers the best explanation of the entire language I have ever seen. It is more thorough, modern, and complete than K&R. From the first few chapters, where you'll learn about printf and scanf, the author takes the time to describe in minute detail all the tiny nuances of the C language. If you are seeking understanding of this language, you simply cannot find a better source.
The book takes the great parts from "agnostic" books by offering tons of exercises that will delight your inner programmer. I never knew how a reverse function worked, but after writing my own reverse program, I felt enlightened. The programs have the added benefit of being relatively easy to write yet somehow able to teach you what it was trying to show you. Even if you aren't interested in learning C per se, this book will teach and reinforce many programming concepts. It is probably easy enough for a beginner to work through, yet difficult enough to delight experienced programmers all in one shot. This is an incredibly difficult target to hit, and this is one of the few books of any genre to pull it off.
I cannot suggest this book enough to anyone who has been searching high and low for a good C learning resource. The author clearly knows what he is talking about. The pacing is wonderful and I don't recall finding any programs that broke. I feel like I am sitting in the classroom of an infinitely knowledgeable and engaging professor when I read this book. It is one of the few books on programming that I have read that I feel like is worth reading from front to back, and it is one of the few programming books that has kept me engrossed in the material for hours on end. Most importantly, after searching for good C learning material, I finally feel like I "get" the language.
Thank you so much for a wonderfully written and designed book, K. N. King.