Short answer: no, you can't.
When initialising a non-static array like this, the compiler has to generate code to copy the initial state of the array out of storage and into the new array. (Because it's a new array every time you call the function.) It's not actually much slower to write code to do this yourself.
Long answer: if you're willing to be evil, you can sort of do it, in C99, by wrapping the array in a struct and using structure assignment...
struct arrayWrapper
{
char* array[4];
};
{
struct arrayWrapper d;
...
d = (struct arrayWrapper){{1, 2, 3, 4}};
}
(syntax may not be quite right.)
But that's evil, and only works in C99, so don't do it, mmm'kay?
array[0] = "Foo"; array[1] = "Bar"; array[2] = "Qux";etc? Using a loop isn't bad unless you care about microseconds.