Рубрики

Как напечатать размер параметра массива в C ++?

Как вычислить размер параметра массива в функции?

Рассмотрим ниже программу C ++:

// Программа на C ++, чтобы показать, что это неправильно
// вычисляем размер параметра массива в функции
#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;

}

Выход:

40 8

Вышеуказанный вывод предназначен для машины, где размер целого числа составляет 4 байта, а размер указателя — 8 байтов.

Оператор cout внутри main print 40 и cout в findSize print 8. Причина в том, что массивам всегда передаются указатели в функциях, то есть findSize (int arr []) и findSize (int * arr) означают одно и то же. Поэтому оператор cout внутри findSize () печатает размер указателя. Смотрите это и это для деталей.

Как найти размер массива в функции?
Мы можем передать «ссылку на массив».

// Программа на C ++, чтобы показать, что мы можем использовать ссылку на
// найти размер массива
#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;

}

Выход:

40 40

Вышеприведенная программа выглядит не очень хорошо, поскольку у нас есть жестко заданный размер параметра массива. Мы можем сделать это лучше, используя шаблоны в C ++ .

// Программа на C ++, показывающая, что мы используем шаблон и
// ссылка для определения размера параметра целочисленного массива
#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;

}

Выход:

40 40

Мы также можем сделать универсальную функцию:

// Программа на C ++, показывающая, что мы используем шаблон и
// ссылка, чтобы найти размер любого параметра массива типа
#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;

}

Выход:

40 40
80 80

Теперь следующим шагом является печать размера динамически размещаемого массива. Это твоя задача, человек! Я даю вам подсказку.

#include <iostream>
#include <cstdlib>

using namespace std;

  

int main()

{

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

    return 0;

}

Эта статья предоставлена Swarupananda Dhua Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Как напечатать размер параметра массива в C ++?

0.00 (0%) 0 votes