sizeof()

The sizeof operator on the Maple returns the number of bytes needed to store a value of a given type[1]. This can be an ordinary numeric type, like int. It can be something more complicated, like a struct or union. If the argument to sizeof is an array, it returns the total number of bytes occupied by the array.

The general syntax looks like this:

sizeof(type)
sizeof(var)

Example

The sizeof operator is useful for dealing with arrays (such as strings) where it is convenient to be able to change the size of the array without breaking other parts of the program.

This program prints out a text string one character at a time. Try changing the text phrase:

char myStr[] = "this is a test";
int i;

void setup() {
  Serial.begin(9600);
}

void loop() {
  for (i = 0; i < sizeof(myStr) - 1; i++) {
    Serial.print(i, DEC);
    Serial.print(" = ");
    Serial.println(myStr[i], BYTE);
  }
}

Note that sizeof returns the total number of bytes. So for larger variable types such as int, the for loop would look something like this:

for (i = 0; i < (sizeof(myInts)/sizeof(int)) - 1; i++) {
  // do something with myInts[i]
}

Footnotes

[1]Technically (and pedantically) speaking, sizeof returns a multiple of the number of bits a char occupies in memory. However, on the Maple (this goes for most C++ implementations), a char occupies 8 bits = 1 byte. All the C++ standard guarantees, however, is that a char occupies at least 8 bits.

License and Attribution

Portions of this page were adapted from the Arduino Reference Documentation, which is released under a Creative Commons Attribution-ShareAlike 3.0 License.