Queries size of the object or type.
Used when actual size of the object must be known.
Contents |
sizeof(type) | (1) | ||||||||
sizeofexpression | (2) | ||||||||
Both versions return a value of typesize_t.
Depending on the computer architecture, abyte may consist of 8 or more bits, the exact number provided asCHAR_BIT.
sizeof(char),sizeof(signedchar), andsizeof(unsignedchar) always return1.
sizeof cannot be used with function types, incomplete types (includingvoid), orbit-field lvalues.
When applied to an operand that hasstructure orunion type, the result is the total number of bytes in such an object, including internal and trailing padding. The trailing padding is such that if the object were an element of an array, the alignment requirement of the next element of this array would be satisfied, in other words,sizeof(T) returns the size of an element of aT[] array.
Iftype is aVLA type and changing the value of itssize expression would not affect the result of | (since C99) |
Except if the type ofexpression is aVLA,(since C99)expression is not evaluated and thesizeof operator may be used in an integerconstant expression.
If the type ofexpression is avariable-length array type,expression is evaluated and the size of the array it evaluates to is calculated at run time. | (since C99) |
Number of elements in anyarrayaincluding VLA(since C99) may be determined with the expressionsizeof a/sizeof a[0]. Note that ifa has pointer type (such as after array-to-pointer conversion of function parameter type adjustment), this expression would simply divide the number of bytes in a pointer type by the number of bytes in the pointed type.
Sample output corresponds to a platform with 64-bit pointers and 32-bit int
#include <stdio.h> int main(void){short x;// type argument:printf("sizeof(float) = %zu\n",sizeof(float));printf("sizeof(void(*)(void)) = %zu\n",sizeof(void(*)(void)));printf("sizeof(char[10]) = %zu\n",sizeof(char[10]));// printf("sizeof(void(void)) = %zu\n", sizeof(void(void))); // Error: function type// printf("sizeof(char[]) = %zu\n", sizeof(char[])); // Error: incomplete type // expression argument:printf("sizeof 'a' = %zu\n",sizeof'a');// type of 'a' is int// printf("sizeof main = %zu\n", sizeof main); // Error: Function typeprintf("sizeof &main = %zu\n",sizeof&main);printf("sizeof\"hello\" = %zu\n",sizeof"hello");// type is char[6]printf("sizeof x = %zu\n",sizeof x);// type of x is shortprintf("sizeof (x+1) = %zu\n",sizeof(x+1));// type of x+1 is int}
Possible output:
sizeof(float) = 4sizeof(void(*)(void)) = 8sizeof(char[10]) = 10sizeof 'a' = 4sizeof &main = 8sizeof "hello" = 6sizeof x = 2sizeof (x+1) = 4
C++ documentation for sizeof operator |