An expression is a sequence of operators and their operands, that specifies a computation.
Expression evaluation may produce a result (e.g., evaluation of 2+2
produces the result 4
), may generate sideeffects (e.g. evaluation of printf("%d",4)
sends the character '4'
to the standard output stream), and may designate objects or functions.
Common operators  

assignment  increment decrement  arithmetic  logical  comparison  member access  other 







 (since C11) 
 (since C99) 
The operands of any operator may be other expressions or they may be primary expressions (e.g. in 1+2*3
, the operands of operator+ are the subexpression 2*3
and the primary expression 1
).
Primary expressions are any of the following:
2
or "Hello, world"
)3) Generic selections  (since C11) 
Any expression in parentheses is also classified as a primary expression: this guarantees that the parentheses have higher precedence than any operator.
Constant values of certain types may be embedded in the source code of a C program using specialized expressions known as literals (for lvalue expressions) and constants (for nonlvalue expressions).
int
suitable for conversion to a character type or of type char16_t
, char32_t
, or (since C11)wchar_t
float
, double
, or long double
 (since C23) 
char[]
, char16_t[]
, char32_t[]
, (since C11) or wchar_t[]
that represent nullterminated strings
 (since C99) 
The operands of the sizeof
operator are expressions that are not evaluated (unless they are VLAs) (since C99). Thus, size_t n = sizeof(printf("%d", 4));
does not perform console output.
The operands of the  (since C11) 
C++ documentation for Expressions 
© cppreference.com
Licensed under the Creative Commons AttributionShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/language/expressions