your image

How to print size of array parameter in C++? - GeeksforGeeks

Swarupananda Dhaa
greeksforgeeks
Related Topic
:- programming skills C++ language

How to print size of array parameter in C++?

  • Difficulty Level : Medium
  • Last Updated : 17 Aug, 2021

How to compute size of an array parameter in a function?
Consider below C++ program:
 

  • CPP

 

 

 

// A C++ program to show that it is wrong to

// compute size of an array parameter in a function

#include <iostream>

using namespace std;

 

void findSize(int arr[])

{

    cout << sizeof(arr) << endl;

}

 

int main()

{

    int a[10];

    cout << sizeof(a) << " ";

    findSize(a);

    return 0;

}

Output: 

40 8

The above output is for a machine where size of integer is 4 bytes and size of a pointer is 8 bytes.
The cout statement inside main prints 40, and cout in findSize prints 8. The reason is, arrays are always passed pointers in functions, i.e., findSize(int arr[]) and findSize(int *arr) mean exactly same thing. Therefore the cout statement inside findSize() prints size of a pointer. See this and this for details.
How to find size of array in function? 
We can pass a ‘reference to the array’. 
 

  • CPP

 

 

 

// A C++ program to show that we can use reference to

// find size of array

#include <iostream>

using namespace std;

 

void findSize(int (&arr)[10])

{

    cout << sizeof(arr) << endl;

}

 

int main()

{

    int a[10];

    cout << sizeof(a) << " ";

    findSize(a);

    return 0;

}

Output: 

40 40

The above program doesn’t look good as we have hardcoded size of array parameter. We can do it better using templates in C++.
 

 

 

 

  • CPP

 

 

 

// A C++ program to show that we use template and

// reference to find size of integer array parameter

#include <iostream>

using namespace std;

 

template <size_t n>

void findSize(int (&arr)[n])

{

    cout << sizeof(int) * n << endl;

}

 

int main()

{

    int a[10];

    cout << sizeof(a) << " ";

    findSize(a);

    return 0;

}

Output: 

40 40

We can make a generic function as well:
 

  • CPP

 

 

 

// A C++ program to show that we use template and

// reference to find size of any type array parameter

#include <iostream>

using namespace std;

 

template <typename T, size_t n>

void findSize(T (&arr)[n])

{

    cout << sizeof(T) * n << endl;

}

 

int main()

{

    int a[10];

    cout << sizeof(a) << " ";

    findSize(a);

 

    float f[20];

    cout << sizeof(f) << " ";

    findSize(f);

    return 0;

}

Output: 

40 4080 80

Now the next step is to print the size of a dynamically allocated array. It’s your task man ! I’m giving you a hint.
 

  • CPP

 

 

 

#include <iostream>

#include <cstdlib>

using namespace std;

 

int main()

{

    int *arr = (int*)malloc(sizeof(int) * 20);

    return 0;

}

Comments