According to C99 Standards, the sizeof() operator only takes into account the type of the operand, which may be an expression or the name of a type (i.e int, double, float etc) and not the value obtained on evaluating the expression. Hence, the operand inside the sizeof() operator is not evaluated. It is evaluated only if the type of the operand is variable length array because in that case, the size can be determined only after the expression is evaluated.
When the sizeof() method is passed a fixed size structure:
In this case, the sizeof() operator does not evaluate the parameter. Only the type of the parameter is checked and its size is returned.
Below figure shows the workflow of sizeof() operator in this scenario:
The output value of x after increment is still 3 as compared to the expected value which is 4. This is because sizeof operator doesn’t need to evaluate the expression to obtain the size as the data type of the operand doesn’t change and hence the size remains the same.
4 x = 3
When the sizeof() method is passed a variable size structure:
In this case, the sizeof() operator evaluates the parameter to see if there is any change of size. If found, then first the size is modified then the final size is returned.
Below example illustrate the sizeof() operator in this scenario:
In this example, the sizeof operator needs to evaluate the expression in order to calculate the size of the array which is shown in the figure. Hence, in this case, we get the value of x after incrementation.
12 x = 4
Again in this example, the sizeof operator needs to evaluate the expression in order to calculate the size of the array which is shown in the figure. In this example, the post-increment operator is used and hence the output in the first line is 16. In the second line, the value of x is printed after incrementation.
16 x = 4
- Pre-increment and Post-increment in C/C++
- Pre-increment (or pre-decrement) in C++
- CSS | counter-increment Property
- Difference between Increment and Decrement Operators
- Increment (Decrement) operators require L-value Expression
- Print matrix after applying increment operations in M ranges
- Count of suffix increment/decrement operations to construct a given array
- Count of even and odd power pairs in an Array
- Serial I/O Lines in 8085 Microprocessor
- Object Oriented Testing in Software Testing
- Node.js | util.types.isSymbolObject() Method
- CSS | -moz-outline-radius property
- Node.js | util.types.isPromise() Method
- Node.js | util.types.isTypedArray() Method
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.
Improved By : rituraj_jain