Look at the following code:
#include <stdio.h>
int main(void)
{
int i = 1;
printf("%lu\n", sizeof(int[++i]));
printf("%d", i);
}
I was testing the sizeof operator because variable-length array type operands are evaluated — I would be happy if someone gives clarification on this as well but the question is different.
6.5.3.4/2
The sizeof operator yields the size (in bytes) of its operand, which may be an expression or the parenthesized name of a type. The size is determined by the type of the operand. The result is an integer. If the type of the operand is a variable-length array type, the operand is evaluated; otherwise, the operand is not evaluated and the result is an integer constant.
The output of the above code on GCC is as follows:
8
2
Can someone please explain where this 8 comes from? Does the array decay into a pointer? Please also give clarification on the variable-length array part.