1

I've an array of type uint8_t* const with 6 items, defined like this

uint8_t* const neighbourSet[] = {PEER1, PEER2, PEER3, PEER4, PEER5, PEER6};

Whereas each element in this array is static uint8_t defined like this

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};

When I do

 Serial.print("size:");
 Serial.println(sizeof(neighbourSet));

I get size:24. I am expecting the size to be 6. could someone explain ? I don't want to hardcode the total number of PEER in a separate integer variable. I want my for loop to run through each element till the total size of array.

 for (int i = 0; i < sizeof(neighbourSet); i++) {
 //do something for each PEER. 
 delay(50);
 } 
Michel Keijzers
13k7 gold badges41 silver badges58 bronze badges
asked Feb 2, 2019 at 14:22
5
  • uint8_t* is a pointer. on AVR it is 2 bytes. on 32bit architectures 4 bytes Commented Feb 2, 2019 at 14:33
  • you want const uint8_t* const neighbourSet? Commented Feb 2, 2019 at 14:39
  • 3
    Hint: sizeof() gives the number of bytes. You are looking for membersof(). It is often defined as #define membersof(x) (sizeof(x) / sizeof(x[0])). Commented Feb 2, 2019 at 15:07
  • int totalPeers = (sizeof(neighbourSet) / sizeof(neighbourSet[0])); worked. Thanks Mikael ! Commented Feb 2, 2019 at 16:54
  • @MikaelPatel you should post that as an answer. I was going to post the same, but then I saw your comment. Commented Feb 3, 2019 at 10:43

1 Answer 1

1

sizeof() gives the number of bytes. You are looking for membersof(). It is often defined as:

#define membersof(x) (sizeof(x) / sizeof(x[0]))

And in the example above:

for (int i = 0; i < membersof(neighbourSet); i++) {
 //do something for each PEER. 
 delay(50);
} 

For more practical C/C++ macro and type extensions please see the Cosa Types.h file.

answered Feb 3, 2019 at 12:39
1
  • Sizeof doesn't work for pointers Commented Feb 4, 2019 at 11:37

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.