"The C Programming Language". C is sufficiently different to justify
reading through the whole book.
I actually took a similar path myself - well, not quite: QBasic ->
8086 Assembly -> C (-> C++) -> Java (the latter is job-related; the
others were hobbies...).
I found that the best book for C is still "The C Programming Language"
- despite its age - as has been pointed out. As for moving between
BASIC and C - I don't know what book will be best, and any that I've
seen are more than 20 years old. However, I thought of a few pointers
to help cover the major differences:
1) C code is not line oriented.
- Multiple statements may be on the same line
- A statement can be broken into several lines
- Statements are ended with a semicolon (';') instead of a line break
- Blocks are delimited by braces ('{' and '}'), instead of END at the
bottom
2) case matters.
- "if" is not the same as "If" or "IF"
- Nearly everything in C is lowercase - keywords and the standard
library.
_Exit() is the only exception I can think of.
- Constants are UPPERCASE (as in many languages, including BASIC)
- Identifiers with several words use under_scores, not CamelCase
3) Strings are not first-class types.
- String literals are given some special treatment by the compiler,
but ...
- Strings break down into NUL terminated arrays of char
- String concatenation is not automatic
3) Many tasks are accomplished by library functions instead of being
statements built in to the language.
- This includes basic input, output, file operations, and mathematical
functions
- Use puts() instead of PRINT, printf() instead of PRINT USING,
scanf() instead of INPUT
- Any user-friendly GUI is non-standard (as far as C is concerned).
There are libraries other than the C standard library available for
various platforms, each of which has its own standards.
4) You have to put a lot more effort into memory management.
- malloc() instead of DIM (whatever that stands for)
- Pointers are used much more heavily than in BASIC (which has some
pointer ability)
That's all that I can think of offhand, but I think that's plenty.
Happy programming!
-- Nachy