It will work for ints by doing this:
int array[] = {1,2,3,4,5};
or this:
int *array = (int[]){1,2,3,4,5};
"string" tells the compiler all the information it needs (size,type) to instantiate the string (aka an array of bytes with a NULL terminator). A naked {} does not unless you declare it as a compound literal. Adding the ints[] tells the compiler that the initiated data is an array of ints.
As Nathan pointed out in the comments there are subtle differences to the two statements.
The first, defines an array of 5 ints on the stack. This array can be modified and lives until the end of the function.
The second, 1) defines an anonymous array of five ints on the stack 2) defines a pointer 'array' to the first element of the anonymous array on the stack. The pointer should not be returned since the memory is on the stack. Also the array is not inherently const like a string literal.
EDIT: Replaced cast with compound literal as pointed out by commentator.
char*.constis there to catch the bug before it can happen.char *foo = "foo";in any form would never ever pass a code review if I had anything to say.