Skip to content
Related Articles
Get the best out of our app
GFG App
Open App
geeksforgeeks
Browser
Continue

Related Articles

C | Pointer Basics | Question 17

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article




#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;


(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.




#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;
}


Output:
10 20 30 40


Quiz of this Question


My Personal Notes arrow_drop_up
Last Updated : 28 Jun, 2021
Like Article
Save Article
Similar Reads