Вычислить размер массива, который был передан в качестве параметра функции
При передаче массива в функцию вы обычно передаете длину массива вместе с ним. Вы можете вычислить размер массива с помощью 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