My question is how exactly sizeof()
behaves when passed argument is a dynamic array variable length array.
Let\'s consider an example:<
My question is how exactly sizeof() behaves when passed argument is a dynamic array.
Well, you rather meant a "variable-length array" (VLA).
It behaves almost exactly the same: it returns the size of the array in bytes.
sizeof() 'behaves like' a function and not as an operator.
Nah, it never was a function. The only thing that changes is that if used on VLAs, this operator doesn't yield a compile-time constant, otherwise it does.
It still behaves as an operator. Cast is also operator and also evaluates it's argument and so does *
or &
. Being an operator is a syntactic category. That does not change.
The important distinction is that it behaves as expression while in other cases it behaves as constant.
Update: I commented below that I don't see why the evaluation makes difference, but now I realized there are two ways you can write sizeof with variable length array. Either you can pass variable declared as variable lenght array:
int a[x];
sizeof(a)
in which case evaluating a
indeed makes no difference. But you can also use a type as the argument, which would be
sizeof(int[x])
and in this case the result is x * sizeof(int)
and x
must be evaluated. Which I suppose is why the specification mentions it.