Вычислить размер массива, который был передан в качестве параметра функции

При передаче массива в функцию вы обычно передаете длину массива вместе с ним. Вы можете вычислить размер массива с помощью sizeof(myArray)/sizeof(myArray[0]), который прекрасно работает.

Однако, если вы попытаетесь сделать это внутри функции, которой вы передаете массив, она не вернет длину массива, например. если это массив int, он возвращает 1, если это массив double, он возвращает 0.

Почему это так и есть ли способ вычислить размер массива, переданного в качестве параметра?

, 👍0

Обсуждение

Если вы не используете его часто (каждый другой тип/размер создает новый экземпляр функции od f), вы можете использовать такие шаблоны, как: template <typename T, size_t N> void f(T(& myArray)[N]) , @KIIV


1 ответ


Лучший ответ:

2

Вы не можете. Вы передаете указатель в массив, и sizeof даст вам размер этого указателя (2 на 8-битном Arduino).

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

myFunction(myArray, sizeof(myArray) / sizeof(myArray[0]));
,