@never_mind

Как применить sizeof в функции?

Надо получить sizeofв функции такой же, как sizeofвmain().
В интернете нашёл только вариант с void func(char (&a)[10]), но мне надо оставить объявление именно такимvoid func(char *a)(хотя... использовать второй параметр точно не надо, остальное можно, но нежелательно). А ещё чтобы работало для массивов разных размеров.

Помогите первокурснику, пожалуйста.

#include <iostream>

using namespace std;

void func(char *a)
{
	cout << "func sizeof(a)=" << sizeof(a);
}

int main()
{
	char a[2][10]{ "test1","test2" };
	cout << "sizeof(a)=" << sizeof(a[0]);
	func(a[0]);
	system("pause");
	return 0;
}
  • Вопрос задан
  • 427 просмотров
Пригласить эксперта
Ответы на вопрос 4
@never_mind Автор вопроса
нужен размер массива
Ответ написан
Комментировать
GavriKos
@GavriKos
Если вам надо размер строки посчитать, то используйте strlen. Если размер строки в байтах, то результат strlen умножьте на sizeof от одного char/
Ответ написан
Комментировать
@MiiNiPaa
Массивы в С++ это одна большая ложь. На самом деле это просто кучка данных, расположенная последовательно в памяти. Хоть какую-то информацию о типе массива можно получить только если массив статический и находится в той же области видимости что и sizeof. В ином случае это просто указатель без дополнительной информации. Поэтому большинство современных источников выступают против использования массивов.

Можете сделать как-то так, чтобы принимать любые массивы:
#include <iostream>
#include <type_traits>

template <typename T>
typename std::enable_if<std::is_array<T>::value>::type
func(T& a)
{
    std::cout << "func sizeof(a)=" << sizeof(a) << '\n';
}

int main()
{
    char a[2][10]{ "test1","test2" };
    std::cout << "sizeof(a)=" << sizeof(a[0]) << '\n';
    func(a[0]);
}
Ответ написан
Комментировать
@abcd0x00
Обычно для этих целей в C++ используют vector.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы