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
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
- Why variable name does not start with numbers in C ?
- Why PHP script does not create a directory with 777 permissions ?
- Pre-increment and Post-increment in C/C++
- Why does AngularJS include an empty option in select ?
- Why does PHP 5.2+ disallow abstract static class methods ?
- Why does canvas.toDataURL() throws a security exception?
- Why does password boxes are smaller than text boxes in IE ?
- Why does SASS cache folder is created ?
- Write a C program that does not terminate when Ctrl+C is pressed
- C program that does not suspend when Ctrl+Z is pressed
- Count of Numbers in Range where the number does not contain more than K non zero digits
- Count maximum elements of an array whose absolute difference does not exceed K
- Why is the size of an empty class not zero in C++?
- Why "&" is not used for strings in scanf() function?
- Why only subtraction of addresses allowed and not division/addition/multiplication
- Why strcpy and strncpy are not safe to use?
- Why should you not Hack Facebook!
- Why overriding both the global new operator and the class-specific operator is not ambiguous?
- Why error "$ is not defined" occurred in jQuery ?
- Why card images use data-src (not src) for image in Bootstrap 4 ?
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