Error taking address of temporary array when passing compound literal array I have an Arduino sketch that passes an array into a method as a compound literal, but for some reason I keep getting the following error:


void setup() { }
void printConcatLine(char chunks[][20]) { }

void loop() {  
  printConcatLine((char[][20]){ "{", "255", "}" });
}


I've also tried passing the number of the pointers/length of the array, and explicitly terminating it:

void setup() { }
void printConcatLine(char *chunks[]) { }

void loop() {  
  printConcatLine((char*[]){ "{", "255", "}", NULL });
}


...and

void setup() { }
void printConcatLine(char chunks[][20]) { }

void loop() {  
  printConcatLine((char[][20]){ "{", "255", "}", "" });
}


But they both produce the same error.  

What is the correct method of passing the compound literal array as a method parameter?
You can't with the Arduino. I am not quite sure why, but I think it may be because it's a Modified Harvard architecture machine.

You can better achieve what you want with variadic arguments, however:

void printConcatLine(int num, ...) {
    va_list ap;
    const char *s;

    va_start(ap, num);
    for (int i = 0; i &lt; num; i++) {
        s = va_arg(ap, const char *);
        Serial.print(s);
    }
    va_end(ap);
    Serial.println();
}

void setup() {
    Serial.begin(115200);
    printConcatLine(3, "{", "255", "}");
}

void loop() {

}


The first argument is the number of arguments that follow, and all the rest are string constants.