Длина константного массива 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);
    }   

, 👍1

Обсуждение

uint8_t* — указатель. на AVR это 2 байта. на 32-битных архитектурах 4 байта, @Juraj

вам нужен const uint8_t* const соседнийSet?, @Juraj

Подсказка: sizeof() дает количество байтов. Вы ищете members(). Его часто определяют как #definemembers(x) (sizeof(x)/sizeof(x[0]))., @Mikael Patel

int totalPeers = (sizeof(neighbourSet) / sizeof(neighbourSet[0])); сработало. Спасибо, Микаэль!, @Anum Sheraz

@MikaelPatel, ты должен опубликовать это как ответ. Я собирался написать то же самое, но увидел твой комментарий., @RubberDuck


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 файл.

,

Sizeof не работает для указателей, @Pararera