Вычислить размер массива, который был передан в качестве параметра функции
При передаче массива в функцию вы обычно передаете длину массива вместе с ним. Вы можете вычислить размер массива с помощью sizeof(myArray)/sizeof(myArray[0]), который прекрасно работает.
Однако, если вы попытаетесь сделать это внутри функции, которой вы передаете массив, она не вернет длину массива, например. если это массив int, он возвращает 1, если это массив double, он возвращает 0.
Почему это так и есть ли способ вычислить размер массива, переданного в качестве параметра?
@LukasFun, 👍0
Обсуждение1 ответ
Лучший ответ:
▲ 2
Вы не можете. Вы передаете указатель в массив, и sizeof даст вам размер этого указателя (2 на 8-битном Arduino).
Вместо этого обычным способом является передача размера массива в качестве параметра вашей функции.
myFunction(myArray, sizeof(myArray) / sizeof(myArray[0]));
,
@Majenko
Смотрите также:
- Невозможно преобразовать 'int (*)[size]' в 'int**': Cannot convert 'int (*)[size]' to 'int**'
- Как удалить элемент из массива arduino?
- Как вернуть значение массива символов в функции Arduino IDE?
- Передача массивов, глобальных массивов внутри функций, указателей и объявление размеров массивов.
- Можно ли создать массив для функций?
- Ошибка получения адреса временного массива при передаче массива составных литералов
- Передача массива time_t в качестве параметра функции
- Как создать функцию, которая будет вводить определенное значение для подзначения массива в зависимости от положения джойстика?
Если вы не используете его часто (каждый другой тип/размер создает новый экземпляр функции od f), вы можете использовать такие шаблоны, как:
template <typename T, size_t N> void f(T(& myArray)[N]), @KIIV