Длина константного массива uint8_t*
У меня есть массив типа uint8_t* const из 6 элементов, определенный следующим образом
uint8_t* const neighbourSet[] = {PEER1, PEER2, PEER3, PEER4, PEER5, PEER6};
Принимая во внимание, что каждый элемент в этом массиве static uint8_t
определен следующим образом
static uint8_t PEER1[] {0x86, 0xF3, 0xEB, 0x7A, 0xE8, 0x3B};
static uint8_t PEER2[] {0x86, 0xF3, 0xEB, 0x7A, 0xA1, 0x09};
static uint8_t PEER3[] {0x84, 0x0D, 0x8E, 0x03, 0x95, 0xED};
static uint8_t PEER4[] {0x84, 0x0D, 0x8E, 0x03, 0x99, 0xD5};
static uint8_t PEER5[] {0x80, 0x7D, 0x3A, 0xC5, 0x2B, 0x79};
static uint8_t PEER6[] {0x84, 0x0D, 0x8E, 0x03, 0x95, 0x1D};
Когда я это сделаю
Serial.print("size:");
Serial.println(sizeof(neighbourSet));
Я получаю size:24
. Я ожидаю, что размер будет 6. Может ли кто-нибудь объяснить?
Я не хочу жестко записывать общее количество PEER в отдельную целочисленную переменную. Я хочу, чтобы мой цикл for проходил через каждый элемент до достижения общего размера массива.
for (int i = 0; i < sizeof(neighbourSet); i++) {
//сделаем что-нибудь для каждого PEER.
delay(50);
}
@Anum Sheraz, 👍1
Обсуждение1 ответ
Лучший ответ:
▲ 1
sizeof()
указывает количество байтов. Вы ищете members()
. Его часто определяют как:
#define membersof(x) (sizeof(x) / sizeof(x[0]))
И в примере выше:
for (int i = 0; i < membersof(neighbourSet); i++) {
//сделаем что-нибудь для каждого PEER.
delay(50);
}
Более практичные макросы и расширения типов C/C++ см. в Cosa Types.h файл.
,
@Mikael Patel
Sizeof не работает для указателей, @Pararera
Смотрите также:
- устаревшее преобразование из строковой константы в 'char*'
- Количество элементов в массиве char
- Работает ли конструкция int array[100] = {0} на Arduino?
- Ошибка Cast from 'char*' to 'uint8_t {aka unsigned char}' loses precision [-fpermissive]
- RtcDateTime' не называет тип
- Как удалить элемент из массива arduino?
- Как вернуть значение массива символов в функции Arduino IDE?
- Как объединить два значения в строку?
uint8_t* — указатель. на AVR это 2 байта. на 32-битных архитектурах 4 байта, @Juraj
вам нужен
const uint8_t* const соседнийSet
?, @JurajПодсказка:
sizeof()
дает количество байтов. Вы ищетеmembers()
. Его часто определяют как#definemembers(x) (sizeof(x)/sizeof(x[0]))
., @Mikael Patelint totalPeers = (sizeof(neighbourSet) / sizeof(neighbourSet[0]));
сработало. Спасибо, Микаэль!, @Anum Sheraz@MikaelPatel, ты должен опубликовать это как ответ. Я собирался написать то же самое, но увидел твой комментарий., @RubberDuck