In C programming, an expression is a combination of one or more values, variables, and operators that can be evaluated to a single value. Expressions can be as simple as a single value or variable, or as complex as a series of operations with multiple operators and operands.

The process of evaluating an expression is called expression evaluation. The C compiler evaluates expressions by following a set of rules defined by the C language specification. These rules include the precedence and associativity of operators, as well as the data types of the operands.

Here's an example of an expression and its evaluation:

int x = 3;

int y = 4;

int z = 5;

int result = (x + y) * z;

In this example, the expression (x + y) * z is being assigned to the variable "result". The parentheses indicate that the addition operation (x + y) should be performed first, with the result being 7. Then the multiplication operation (7 * z) is performed, with the result being 35. Therefore, the final value of "result" is 35.

It's worth noting that expressions can be used in various contexts in C programming, such as in assignment statements, function calls, or control structures like if-else statements and loops. Expressions can also be nested, where one expression is used as part of another expression.

It's also worth noting that not all expressions have a value, for example, expressions like variable++, variable--, function calls, assignments and so on, are called statements and executed for their side effect rather than the value they return, but they are still expressions as they can be used anywhere an expression can be used.