The book is nicely laid out with plenty of diagrams, code fragments and interesting example programs.
This is a book aimed at undergraduate level students who are computer literate with previous programming experience an advantage but not required. The author has a style of teaching that is quite unusual in my experience. That is, each data type, programming concept etc. is introduced as it is needed and not before, so as not to immediately swamp the beginner with too much information. This allows the basics to be explained fully before more involved concepts such as pointers turn up in chapter 11. The explanation of pointers is, thankfully, one of the clearest I have seen. This 'need-to-know' style means that other troublesome areas such as dynamic memory allocation and bitwise operations are left almost to the end.
The second half of the book contains chapters on structuring multi-file programs, abstract data types, error handling and the standard library functions. Tacked onto the end of the chapter on program design is a 22-page introduction to C++. This does little more than skim the surface (think of Bjarne Stroustrup's chapter 'A Tour of C++' in 'The C++ Programming Language'). Since this special feature is identified on the cover, I assume it was included to help sell a book on an old fashioned language like C.
The book is nicely laid out with plenty of diagrams, code fragments and interesting example programs. Aside from a few unidentified portability issues, a few typos in the code and in the text, there is very little I can find to criticise this book for and a lot I wish other authors would emulate.