The typeof operator in plain C (not C++) is a GCC addition to the standard. It tells the compiler you want to use the type of the expression enclosed in parenthesis.
Using typeof as above, you can declare variables of types unknown to you or in that context, using another variable’s type as reference. It can also be used for casting.
The + operation inside typeof has a peculiar effect. typeof((c) + 1) means “the type of c, or the type of 1, whichever would remain after promotion”. Remember that, for example, chars are promoted to ints when used in operations involving ints, ints are promoted to floats, floats to doubles, etc.
So, typeof(int_variable + char_variable) is int, since the char would be promoted to int to perform the operation.
Note that only the compiler can resolve this: typeof doesn’t evaluate, it has no value, nothing happens at run-time.
The full description of typeof can be found here.