sizeof() Operator in C: Usage and Examples

Aravind Vignesh   Software Engineer   2024-07-04 05:09:26   10787  Share
Subject Syllabus DetailsSubject Details 1 Questions 18 Program
☰ TContent
☰Fullscreen

The sizeof is a unary operator which returns the size of data (constant, variables, array, structure etc).


sizeof operator on Datatype

When an operand is a Data Type. When sizeof() is used with the data types such as int, float, char… etc it simply returns the amount of memory is allocated to that data types.


Program

<span class="pln">
</span><span class="com">#include</span><span class="str">&lt;stdio.h&gt;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> main</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    printf</span><span class="pun">(</span><span class="str">"%d\n"</span><span class="pun">,</span><span class="kwd">sizeof</span><span class="pun">(</span><span class="kwd">char</span><span class="pun">));</span><span class="pln">
    printf</span><span class="pun">(</span><span class="str">"%d\n"</span><span class="pun">,</span><span class="kwd">sizeof</span><span class="pun">(</span><span class="kwd">int</span><span class="pun">));</span><span class="pln">
    printf</span><span class="pun">(</span><span class="str">"%d\n"</span><span class="pun">,</span><span class="kwd">sizeof</span><span class="pun">(</span><span class="kwd">float</span><span class="pun">));</span><span class="pln">
    printf</span><span class="pun">(</span><span class="str">"%d"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">sizeof</span><span class="pun">(</span><span class="kwd">double</span><span class="pun">));</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> 
</span>

Output

1
4
4
8Press any key to continue . . .

sizeof operator on Variable

Program

<span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str">&lt;stdio.h&gt;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> main</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">int</span><span class="pln"> a</span><span class="pun">,</span><span class="pln"> e</span><span class="pun">[</span><span class="lit">10</span><span class="pun">];</span><span class="pln">
    </span><span class="kwd">float</span><span class="pln"> b</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">double</span><span class="pln"> c</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">char</span><span class="pln"> d</span><span class="pun">;</span><span class="pln">
    printf</span><span class="pun">(</span><span class="str">"Size of int=%lu bytes\n"</span><span class="pun">,</span><span class="kwd">sizeof</span><span class="pun">(</span><span class="pln">a</span><span class="pun">));</span><span class="pln">
    printf</span><span class="pun">(</span><span class="str">"Size of float=%lu bytes\n"</span><span class="pun">,</span><span class="kwd">sizeof</span><span class="pun">(</span><span class="pln">b</span><span class="pun">));</span><span class="pln">
    printf</span><span class="pun">(</span><span class="str">"Size of double=%lu bytes\n"</span><span class="pun">,</span><span class="kwd">sizeof</span><span class="pun">(</span><span class="pln">c</span><span class="pun">));</span><span class="pln">
    printf</span><span class="pun">(</span><span class="str">"Size of char=%lu byte\n"</span><span class="pun">,</span><span class="kwd">sizeof</span><span class="pun">(</span><span class="pln">d</span><span class="pun">));</span><span class="pln">
    printf</span><span class="pun">(</span><span class="str">"Size of integer type array having 10 elements = %lu bytes\n"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">sizeof</span><span class="pun">(</span><span class="pln">e</span><span class="pun">));</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span>

Output

Size of int=4 bytes
Size of float=4 bytes
Size of double=8 bytes
Size of char=1 byte
Size of integer type array having 10 elements = 40 bytes
Press any key to continue . . .

sizeof operator on operand is an expression

When operand is an expression. When sizeof() is used with the expression, it returns size of the expression. Let see example:

Program

<span class="pln">
</span><span class="com">#include</span><span class="str">&lt;stdio.h&gt;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> main</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">int</span><span class="pln"> a </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">double</span><span class="pln"> d </span><span class="pun">=</span><span class="pln"> </span><span class="lit">10.21</span><span class="pun">;</span><span class="pln">
    printf</span><span class="pun">(</span><span class="str">"%d \n"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">sizeof</span><span class="pun">(</span><span class="pln">a</span><span class="pun">+</span><span class="pln">d</span><span class="pun">));</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> 
</span>

Output

8
Press any key to continue . . .

As we know from first case size of int and double is 4 and 8 respectively, a is int variable while d is a double variable. final result will be a double, Hence output of our program is 8 bytes.


Need of Sizeof

To find out number of elements in a array. Sizeof can be used to calculate number of elements of the array automatically. Let see Example :

Program

<span class="pln">
</span><span class="com">#include</span><span class="str">&lt;stdio.h&gt;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> main</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
   </span><span class="kwd">int</span><span class="pln"> arr</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7</span><span class="pun">,</span><span class="pln"> </span><span class="lit">98</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">12</span><span class="pun">,</span><span class="pln"> </span><span class="lit">35</span><span class="pun">,</span><span class="pln"> </span><span class="lit">99</span><span class="pun">,</span><span class="pln"> </span><span class="lit">14</span><span class="pun">};</span><span class="pln">
   printf</span><span class="pun">(</span><span class="str">"Number of elements :%d \n"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">sizeof</span><span class="pun">(</span><span class="pln">arr</span><span class="pun">)/</span><span class="kwd">sizeof</span><span class="pun">(</span><span class="pln">arr</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]));</span><span class="pln">
   </span><span class="kwd">return</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> 
</span>

Output

Number of elements :11
Press any key to continue . . .

To allocate block of memory dynamically.

sizeof is greatly used in dynamic memory allocation. For example, if we want to allocate memory for which is sufficient to hold 10 integers and we don't know the sizeof(int) in that particular machine. We can allocate with the help of sizeof.

Program

int *ptr = malloc(10*sizeof(int));

Important Program

Program 1:

<span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str">&lt;stdio.h&gt;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> main</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln"> 
printf</span><span class="pun">(</span><span class="pln"> </span><span class="str">"\n %d %d \n"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">sizeof</span><span class="pun">(</span><span class="str">'3'</span><span class="pun">),</span><span class="pln"> </span><span class="kwd">sizeof</span><span class="pun">(</span><span class="str">"3"</span><span class="pun">),</span><span class="pln"> </span><span class="kwd">sizeof</span><span class="pun">(</span><span class="lit">3</span><span class="pun">)</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">;</span><span class="pln">
 
</span><span class="pun">}</span><span class="pln">
</span>

Output


 4 2
Press any key to continue . . .

Program 2:

In this case x and y will not hold the same value

x = sizeof(pi); this will return 4 in case of 32 bit machine.

y = sizeof(3.14); this will return double precion value at is 8 in case of same 32 bit machine.

<span class="pln">
</span><span class="com">#include</span><span class="str">&lt;stdio.h&gt;</span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> main</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> x</span><span class="pun">,</span><span class="pln">y</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">float</span><span class="pln"> pi</span><span class="pun">=</span><span class="lit">3.14</span><span class="pun">;</span><span class="pln">
x </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">sizeof</span><span class="pun">(</span><span class="pln">pi</span><span class="pun">);</span><span class="pln">
y </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">sizeof</span><span class="pun">(</span><span class="lit">3.14</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">x</span><span class="pun">==</span><span class="pln">y</span><span class="pun">)</span><span class="pln">
 </span><span class="pun">{</span><span class="pln">
 printf</span><span class="pun">(</span><span class="str">"Size is same \n"</span><span class="pun">);</span><span class="pln">
 </span><span class="pun">}</span><span class="pln">
 </span><span class="kwd">else</span><span class="pun">{</span><span class="pln">
 printf</span><span class="pun">(</span><span class="str">"Size is not same \n"</span><span class="pun">);</span><span class="pln"> 
 </span><span class="pun">}</span><span class="pln">

</span><span class="pun">}</span><span class="pln">
</span>

Output

Size is not same
Press any key to continue . . .
<span class="pln">
</span><span class="com">#include</span><span class="str">&lt;stdio.h&gt;</span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> main</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> x</span><span class="pun">,</span><span class="pln">y</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">float</span><span class="pln"> pi</span><span class="pun">=</span><span class="lit">3.14</span><span class="pun">;</span><span class="pln">
x </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">sizeof</span><span class="pun">(</span><span class="pln">pi</span><span class="pun">);</span><span class="pln">
y </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">sizeof</span><span class="pun">(</span><span class="lit">3.14</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">x</span><span class="pun">==</span><span class="pln">y</span><span class="pun">)</span><span class="pln">
 </span><span class="pun">{</span><span class="pln">
 printf</span><span class="pun">(</span><span class="str">"Size is same \n"</span><span class="pun">);</span><span class="pln">
 </span><span class="pun">}</span><span class="pln">
 </span><span class="kwd">else</span><span class="pun">{</span><span class="pln">
 printf</span><span class="pun">(</span><span class="str">"Size is not same \n"</span><span class="pun">);</span><span class="pln"> 
 </span><span class="pun">}</span><span class="pln">
 
  printf</span><span class="pun">(</span><span class="str">"%d\n"</span><span class="pun">,</span><span class="pln">x</span><span class="pun">);</span><span class="pln">
  printf</span><span class="pun">(</span><span class="str">"%d\n"</span><span class="pun">,</span><span class="pln">y</span><span class="pun">);</span><span class="pln">

</span><span class="pun">}</span><span class="pln">
</span>

Output

Size is not same
4
8
Press any key to continue . . .

MCQ Available

There are 4 MCQs available for this topic.

4 MCQ


Stay Ahead of the Curve! Check out these trending topics and sharpen your skills.