C | Pointer Basics | Question 17

filter_none

edit
close

play_arrow

link
brightness_4
code

#include<stdio.h>
void fun(int arr[])
{
  int i;
  int arr_size = sizeof(arr)/sizeof(arr[0]);
  for (i = 0; i < arr_size; i++)
      printf("%d ", arr[i]);
}
  
int main()
{
  int i;
  int arr[4] = {10, 20 ,30, 40};
  fun(arr);
  return 0;
chevron_right

(A) 10 20 30 40
(B) Machine Dependent
(C) 10 20
(D) Northing

Answer: (B)
Explanation: In C, array parameters are always treated as pointers. So following two statements have the same meaning.

void fun(int arr[])
void fun(int *arr)

[] is used to make it clear that the function expects an array, it doesn’t change anything though. People use it only for readability so that the reader is clear about the intended parameter type. The bottom line is, sizeof should never be used for array parameters, a separate parameter for array size (or length) should be passed to fun(). So, in the given program, arr_size contains ration of pointer size and integer size, this ration= is compiler dependent.

filter_none

edit
close

play_arrow

link
brightness_4
code

#include <stdio.h>
void fun(int arr[], size_t arr_size)
{
  int i;
  for (i = 0; i < arr_size; i++)
      printf("%d ", arr[i]);
}
  
int main()
{
  int i;
  int arr[] = {10, 20 ,30, 40};
  
  // Use of sizeof is fine here
  size_t n = sizeof(arr)/sizeof(arr[0]);
  fun(arr, n);
  return 0;
}
chevron_right

Output:
10 20 30 40

Quiz of this Question

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.




Article Tags :
C
Practice Tags :