The C sizeof operator accepts exactly one argument and returns its size, measured in bytes. The result from the operator is of type size_t, which is defined in the header <stddef.h>.
sizeof is an unary operator, meaning that it accepts exactly one argument (operand). Depending on the operand, you will or you won’t need to use parenthesis around it:
You can use it to get the size of any type:
sizeof(<type>);
..or get the size of an expression:
sizeof <expression>;
Rules:
Do not use the C sizeof operator with:
Here you can check the size of any type.
sizeof(char); //This will always return 1:
You can test and print the size of the different data types like this:
printf("%u\n", sizeof(short)); printf("%u\n", sizeof(int)); printf("%u\n", sizeof(double));
sizeof 5; // This will return the size of the int type(4 bytes in my case) double price = 299.90; printf("%u\n", sizeof price); // This will print the size of the double data type and not the value, saved in the variable price int numbers[15]; int arraySize = sizeof numbers; printf("%u\n", arraySize);
Note for the last example: We will not get the number of elements in the array, nor the size of the int type. What we will get is the actual amount of memory, needed to store the array. It is equal to the number of elements multiplied by the size of the array type. On my computer this is 15 * 4 = 60 Bytes.
In C, the standard way to get the number of elements in an array is like this:
int elementsCount = sizeof arrayName / sizeof arrayName[0];
In other words, we divide the size of the array by the size of one element. Logically, the result is the number of elements in that array.
Note: this will not work in a function that received the array as a parameter. That’s because the actual parameter is a pointer to the array and not the array itself. This is the reason why in C you should always pass the size of the array as a complementary argument to the array.
Related reading: