C99 is the most recent standard dialect of C. It replaces ANSI C (also known as C90), the dialect described in KernighanRitchie. By standard it is meant that there exist a standards document describing the language. Sadly, this does not mean that all or even many compilers support all features of C99.
For CS223, you may use the features of C99 that are supported by gcc. To access these features, gcc should be run with the -std=c99 flag. If you would prefer to avoid using these features, that's OK too.
Some features of C99 that are actually useful:
Variadic macros; see C/Macros.
Variable length arrays; see C/Pointers. These are a godsend for building multidimensional arrays and a dangerous trap for avoiding malloc.
C++-style // comments:
C++-style declarations in for loops (more generally, the ability to put declarations other than at the top of a block):
New headers stdint.h and inttypes.h: integer types with guaranteed sizes. See C/IntegerTypes.
C99 specifies the behavior of / and % when dividing by negative integers; the previous behavior was implementation-dependent. See C/IntegerTypes.
Features whose utility is less obvious:
Support for complex numbers in complex.h.
Support for an explicit Boolean type in bool.h.
The restrict qualifier for pointers, which allows more aggressive optimization of code that involves multiple pointer variables that might overlap. See C/Pointers.