Consider the below program.
Output: 0 0 0 0 on a IA-32 machine.
The function fun() receives an array parameter arr and tries to find out number of elements in arr using sizeof operator.
In C, array parameters are treated as pointers (See this for details). So the expression sizeof(arr)/sizeof(arr) becomes sizeof(int *)/sizeof(int) which results in 1 for IA 32 bit machine (size of int and int * is 4) and the for loop inside fun() is executed only once irrespective of the size of the array.
Therefore, sizeof should not be used to get number of elements in such cases. A separate parameter for array size (or length) should be passed to fun(). So the corrected program is:
Please write comments if you find anything incorrect in the above article or you want to share more information about the topic discussed above.
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.
- Is sizeof for a struct equal to the sum of sizeof of each member?
- How to find size of array in C/C++ without using sizeof ?
- Why C treats array parameters as pointers?
- sizeof operator in C
- Why does sizeof(x++) not increment x in C?
- Implement Your Own sizeof
- sizeof() for Floating Constant in C
- Operands for sizeof operator
- Anything written in sizeof() is never executed in C
- Difference between strlen() and sizeof() for string in C
- Class template with multiple parameters
- What is evaluation order of function parameters in C?
- Jagged Array or Array of Arrays in C with Examples
- Difference between pointer to an array and array of pointers
- array::fill() and array::swap() in C++ STL
- array::front() and array::back() in C++ STL
- Array of Structures vs. Array within a Structure in C/C++
- array::cbegin() and array::cend() in C++ STL
- array::rbegin() and array::rend() in C++ STL
- What’s difference between “array” and “&array” for “int array” ?
Improved By : shohamziner